ผู้ดูแลฐานข้อมูล

ถามตอบสำหรับผู้เชี่ยวชาญด้านฐานข้อมูลที่ต้องการพัฒนาทักษะฐานข้อมูลและเรียนรู้จากผู้อื่นในชุมชน

1
pgAdmin ช้ามากในการดำเนินการทางไกล
ฉันเรียกใช้แบบสอบถามนี้จาก pgAdmin ท้องถิ่นของฉันเชื่อมต่อจากระยะไกลไปยังเซิร์ฟเวอร์ dev ของเรา: select * from users order by random() limit 1; แฮงค์เป็นเวลา17วินาทีและแสดงให้เห็น Total query runtime: 148 ms. 1 row retrieved. มันยังค้างอยู่บนการดำเนินการใด ๆ แม้แต่คลิกขวาบนโต๊ะ Afterwise ฉันเชื่อมต่อผ่าน RDP และเรียกใช้แบบสอบถามเดียวกันมีในรุ่น pgAdmin query time: 32 msเดียวกันซึ่งแสดงผลทันทีด้วย จากนั้นฉันเรียกใช้แบบสอบถามจาก pgAdmin ท้องถิ่นของฉันอีกครั้ง: Total query runtime: 337 ms. 1 row retrieved. ฉันมี ping 130 ms …

2
ความแตกต่างระหว่างตัวติดตั้งที่แตกต่างกันของ SQL Server 2014 Express
ฉันพยายามเข้าใจความแตกต่างระหว่างตัวติดตั้งที่แตกต่างกันของ SQL Server 2014 Express หากคุณสามารถบอกสิ่งที่คุณสามารถหรือหาเอกสารเกี่ยวกับพวกเขาฉันจะขอบคุณมัน https://www.microsoft.com/en-us/download/confirmation.aspx?id=42299 Express 32BIT WoW64\SQLEXPR32_x86_ENU.exe Express 32BIT\SQLEXPR_x86_ENU.exe Express 64BIT\SQLEXPR_x64_ENU.exe ExpressAdv 32BIT\SQLEXPRADV_x86_ENU.exe ExpressAdv 64BIT\SQLEXPRADV_x64_ENU.exe ExpressAndTools 32BIT\SQLEXPRWT_x86_ENU.exe ExpressAndTools 64BIT\SQLEXPRWT_x64_ENU.exe LocalDB 32BIT\SqlLocalDB.msi LocalDB 64BIT\SqlLocalDB.msi MgmtStudio 32BIT\SQLManagementStudio_x86_ENU.exe MgmtStudio 64BIT\SQLManagementStudio_x64_ENU.exe

2
การรวมกันอย่างมีประสิทธิภาพ (ลบรายการที่ซ้ำกัน) ของอาร์เรย์
ฉันมีสองตารางและleft2 right2ตารางทั้งสองจะมีขนาดใหญ่ (แถว 1-10M) CREATE TABLE left2(id INTEGER, t1 INTEGER, d INTEGER); ALTER TABLE left2 ADD PRIMARY KEY (id,t1); CREATE TABLE right2( t1 INTEGER, d INTEGER, arr INTEGER[] ); ALTER TABLE right2 ADD PRIMARY KEY(t1,d); ฉันจะทำการค้นหาประเภทนี้: SELECT l.d + r.d, UNIQ(SORT((array_agg_mult(r.arr))) FROM left2 l, right2 r WHERE l.t1 = r.t1 …

2
psql: SELECT * …ยกเว้นหนึ่งคอลัมน์
ฉันค้นหาวิธีง่ายๆในการเลือกคอลัมน์ทั้งหมดยกเว้นคอลัมน์หนึ่งใน psql ด้วยความpsqlที่ผมหมายถึงบรรทัดคำสั่งแบบโต้ตอบ ฉันจะมีความสุขกับเครื่องมือที่ขยายไป*ยังรายการชื่อคอลัมน์ที่ยกมา จากนั้นฉันสามารถลบคอลัมน์เพื่อลบด้วยมือ คำถามของฉันเกี่ยวกับการใช้งานแบบโต้ตอบของ psql มันไม่ได้เป็นคำถามซ้ำ ๆ ของคนที่ไม่พอใจมาตรฐานของ sql และผู้ที่ต้องการดำเนินการบางอย่างเช่น "select * -foo"
10 postgresql  psql 

3
แบบสอบถาม PostgreSQL ช้ามากเมื่อเพิ่มแบบสอบถามย่อย
ฉันมีแบบสอบถามที่ค่อนข้างง่ายในตารางที่มีแถว 1.5M: SELECT mtid FROM publication WHERE mtid IN (9762715) OR last_modifier=21321 LIMIT 5000; EXPLAIN ANALYZE เอาท์พุท: Limit (cost=8.84..12.86 rows=1 width=8) (actual time=0.985..0.986 rows=1 loops=1) -> Bitmap Heap Scan on publication (cost=8.84..12.86 rows=1 width=8) (actual time=0.984..0.985 rows=1 loops=1) Recheck Cond: ((mtid = 9762715) OR (last_modifier = 21321)) -> BitmapOr (cost=8.84..8.84 …

1
ค่าเริ่มต้นที่ไม่ถูกต้อง (mysql 5.7) สำหรับฟิลด์การประทับเวลา
แก้ไข: เมื่อปรับปรุงฐานข้อมูลที่มีอยู่จาก mysql 5.6 และดำเนินการ: UPDATE phppos_register_log SET shift_end = '2015-01-01 00:00:00' WHERE shift_end = '0000-00-00 00:00:00'; สิ่งนี้ผลิต: #1292 - Incorrect datetime value: '0000-00-00 00:00:00' for column 'shift_end' at row 1 #1067 - Invalid default value for 'shift_start' สิ่งนี้ทำงานใน mysql <= 5.7 ฉันไม่พบเอกสารใด ๆ เกี่ยวกับสิ่งนี้ ... ปัญหานี้คืออะไร CREATE TABLE `phppos_register_log` …
10 mysql  mysql-5.7 

3
หากคุณไม่ย้อนกลับธุรกรรมจะยังคงมีการเปลี่ยนแปลงหรือไม่
สมมติว่าฉันกำลังเรียกใช้แบบสอบถาม begin tran update users set name = 'Jimmy' where name = 'john' หากฉันไม่ย้อนกลับธุรกรรมการเปลี่ยนแปลงเหล่านี้จะยังคงเกิดขึ้นมันจะเกิดข้อผิดพลาดหรือจะทำหน้าที่เป็นการย้อนกลับหรือไม่
10 sql-server 

1
ทำไม postgresql pg_dump ส่งออกมุมมองเป็นตาราง
ฉันใช้pg_dumpเครื่องมือPostgreSQL 9.3 สำหรับการแยกนิยามสคีมาสาธารณะโดยใช้: pg_dump -s -n public -h host -U postgres --dbname=db > ./schema.sql แต่เมื่อฉันตรวจสอบschema.sqlหนึ่งในมุมมองของเราปรากฏในCREATE TABLEคำสั่งแทนCREATE VIEWคำสั่ง แต่ถ้าฉันpg_dumpใช้มุมมองเฉพาะ: pg_dump -s -t myview -h host -U postgres --dbname=db > ./schema.sql จากนั้นschema.sqlมีคำจำกัดความมุมมองที่แท้จริง แล้วทำไมสิ่งนี้ถึงเกิดขึ้น ขอบคุณทุกคน!

1
ให้สิทธิ์น้อยที่สุดสำหรับการเข้าถึงตารางเดี่ยวแบบอ่านอย่างเดียวบน PostgreSQL
ต่อไปนี้เป็นรายการของคำสั่งที่ดูเหมือนว่าจะทำงานเพื่อสร้างผู้ใช้ใหม่ (เข้าสู่ระบบ) และให้สิทธิ์การเข้าถึงแบบอ่านอย่างเดียวสำหรับหนึ่งตารางที่ระบุบน PostgreSQL สมมติว่าคำสั่งเหล่านี้จะถูกดำเนินการในการเข้าสู่ระบบด้วยสิทธิ์ที่เพียงพอ (เช่นการpostgresเข้าสู่ระบบในการติดตั้งเริ่มต้น) CREATE ROLE user_name NOSUPERUSER NOCREATEDB NOCREATEROLE NOINHERIT LOGIN PASSWORD 'pwd' VALID UNTIL 'infinity'; ตอนนี้ฉันต้องการอนุญาตselectบนโต๊ะtab_abcในฐานข้อมูลdb_xyzดังนั้นที่นี่มันไป (ฐานข้อมูลdb_xyzถูกเลือกเป็นปัจจุบันผ่าน PgAdmin หรืออะไรทำนองนั้น): grant select on tab_abc to user_name; คำถามคือ: นี่คือเพียงพอหรือควรจะมีเงินทุนมากขึ้น (ฐานข้อมูลconnect, usageอาจจะ)? คำสั่งเหล่านี้ดูเหมือนจะใช้งานได้สำหรับฉัน แต่การติดตั้งเริ่มต้นของฉันมีการตั้งค่าความปลอดภัยเริ่มต้น ฉันควรเพิ่มอะไรเพิ่มเติมหากผู้ดูแลระบบเซิร์ฟเวอร์กำหนดค่าความปลอดภัยที่สูงขึ้น มันดูเหมือนว่าฉันไม่ต้องการที่จะให้connectหรือusage- จะ implicite ว่าในขณะที่การอนุญาตให้select? เป็นเช่นนั้นเสมอหรือไม่

1
วิธีใช้ดัชนีเพื่อเพิ่มความเร็วในการเรียงลำดับใน postgres
ฉันใช้ postgres 9.4 The messagesมีสคีมาดังต่อไปนี้: ข้อความเป็นของ feed_id และโพสต์ _at และข้อความสามารถมีข้อความหลัก (ในกรณีที่ตอบกลับ) Table "public.messages" Column | Type | Modifiers ------------------------------+-----------------------------+----------- message_id | character varying(255) | not null feed_id | integer | parent_id | character varying(255) | posted_at | timestamp without time zone | share_count | integer | Indexes: "messages_pkey" PRIMARY KEY, …

1
จะปิดการใช้งานคีย์ต่างประเทศชั่วคราวใน Amazon RDS PostgreSQL ได้อย่างไร
ฉันกำลังย้ายสภาพแวดล้อมการทดสอบที่มีอยู่ไปที่ Amazon RDS PostgreSQL เฟรมเวิร์กการทดสอบมีคุณลักษณะของการโหลดข้อมูลในบางตารางเป็นสถานะก่อนหน้า สำหรับสิ่งนี้จะปิดใช้งานคีย์ต่างประเทศลบข้อมูลที่มีอยู่โหลดบันทึกสถานะและเปิดใช้งานคีย์ต่างประเทศอีกครั้ง ปัจจุบันกรอบการทดสอบปิดการใช้งานคีย์ต่างประเทศโดยการปิดการใช้งานทริกเกอร์ทั้งหมด (แน่นอนต้องใช้ superuser): alter table tablename disable trigger all; ใน RDS สิ่งนี้ล้มเหลวด้วย: ข้อผิดพลาด: สิทธิ์ที่ถูกปฏิเสธ: "RI_ConstraintTrigger_a_20164" เป็นตัวกระตุ้นระบบ ฉันจะปิดใช้งานคีย์ต่างประเทศชั่วคราวใน Amazon RDS PostgreSQL ได้อย่างไร หมายเหตุ: คำถามที่คล้ายกันได้ถูกถามแล้ว ( PostgreSQL บน RDS: วิธีการนำเข้าข้อมูลจำนวนมากด้วยข้อ จำกัด FK? ) แต่เป็นเฉพาะเกี่ยวกับการนำเข้าแบบออฟไลน์และการแก้ปัญหาเฉพาะสำหรับการนำเข้าแบบออฟไลน์ด้วย

2
จะปลอดภัยไหมที่จะยกเลิกการสืบค้น PostgreSQL ALTER TABLE ที่รอการล็อก?
เราเริ่มALTER TABLEคำถามเมื่อหลายชั่วโมงก่อนและเพิ่งรู้ว่าเพิ่งผ่านpg_stat_activityการล็อค เราค้นพบแบบสอบถามอื่น ๆ ที่ถือล็อคบนตารางที่เราต้องการแก้ไขและไม่ปล่อยให้มันไป แบบสอบถามของเราคือแบบสอบถามแบบ "ง่าย" (การเปลี่ยนชนิดข้อมูลคอลัมน์) แต่กำลังทำงานบนตารางขนาดใหญ่ ALTER TABLEแทนที่จะฆ่ากระบวนการที่จะถือไว้ล็อคเราได้ตัดสินใจว่าเราอยากจะฆ่า เราไม่ได้ห่อALTER TABLEในการทำธุรกรรม เท่าที่ฉันเข้าใจความจริงที่ว่าแบบสอบถามของเรากำลังรอการล็อกหมายความว่ามันกำลังรอการล็อคอยู่เสมอและมันไม่เคยเปลี่ยนแปลงอะไรเลย มันเป็นเรื่องจริงเหรอ? ปลอดภัยALTER TABLEหรือไม่ที่เราจะยกเลิกการสอบถามของเราทันที หรือเป็นไปได้ว่าแบบสอบถามได้แก้ไขบางสิ่งบางอย่างแล้วและการยกเลิกจะทำให้ฐานข้อมูลของเราอยู่ในสถานะกึ่งกลางหรือไม่ PS: SELECT pg_cancel_backend(pid);แผนคือการยกเลิกการใช้ หากนี่เป็นความคิดที่ไม่ดีโปรดแจ้งให้เราทราบ

3
คุณจะหาตำแหน่งที่ใช้โพรซีเดอร์ที่เก็บไว้ได้อย่างไร (ในโพรซีเดอร์อื่นที่เก็บไว้)
ฉันมีขั้นตอนการจัดเก็บที่ฉันต้องการ refactor ในฐานข้อมูลที่มี SP หลายพันรายการ มีวิธีที่รวดเร็วในการค้นหาการอ้างอิงไปยังกระบวนงานที่เก็บไว้ใน SP อื่น ๆ เพื่อให้ฉันสามารถมั่นใจได้ว่าฉันจะไม่ทำลายรหัสอื่น ๆ เมื่อฉัน refactor ในรหัสแอปพลิเคชันฉันสามารถค้นหาการเรียกไปที่ SP ได้อย่างง่ายดายและฉันสามารถค้นหาข้อความผ่านไฟล์ sql ต่างๆที่กำหนด SPs ได้ แต่อาจเป็นไปได้ที่อาจมี SP บางตัวในฐานข้อมูลซึ่งอาจพลาดวิธีนั้น . แก้ไข: ขั้นตอนการจัดเก็บฉันพยายามค้นหาเป็นส่วนหนึ่งของแพคเกจ แก้ไข: ฉันใช้ Oracle 11g

1
วิธีหลีกเลี่ยงการใช้แบบสอบถามแบบผสานเมื่อทำซ้ำหลายข้อมูลโดยใช้พารามิเตอร์ xml
ฉันกำลังพยายามอัปเดตตารางด้วยอาร์เรย์ของค่าต่างๆ แต่ละรายการในอาร์เรย์มีข้อมูลที่ตรงกับแถวในตารางในฐานข้อมูล SQL Server หากแถวนั้นมีอยู่แล้วในตารางเราจะอัปเดตแถวนั้นด้วยข้อมูลในอาร์เรย์ที่กำหนด มิฉะนั้นเราจะแทรกแถวใหม่ในตาราง ฉันได้อธิบายโดยทั่วไปเพิ่มขึ้น ตอนนี้ฉันกำลังพยายามทำให้สำเร็จในโพรซีเดอร์ที่เก็บไว้ซึ่งใช้พารามิเตอร์ XML เหตุผลที่ฉันใช้ XML และไม่ใช่พารามิเตอร์ที่มีค่าเป็นตารางเนื่องจากฉันจะต้องสร้างประเภทที่กำหนดเองใน SQL และเชื่อมโยงประเภทนี้กับกระบวนงานที่เก็บไว้ หากฉันเปลี่ยนบางสิ่งบางอย่างในขั้นตอนการจัดเก็บหรือ db schema ของฉันลงที่ถนนฉันจะต้องทำซ้ำทั้งขั้นตอนการจัดเก็บและประเภทที่กำหนดเอง ฉันต้องการหลีกเลี่ยงสถานการณ์นี้ นอกจากนี้ความเหนือกว่าที่ TVP มีเหนือ XML ไม่มีประโยชน์สำหรับสถานการณ์ของฉันเพราะขนาดอาร์เรย์ข้อมูลของฉันจะไม่เกิน 1,000 ซึ่งหมายความว่าฉันไม่สามารถใช้โซลูชันที่เสนอที่นี่: วิธีแทรกหลายระเบียนโดยใช้ XML ใน SQL Server 2008 นอกจากนี้ยังมีการอภิปรายที่คล้ายกันที่นี่ ( UPSERT - มีทางเลือกที่ดีกว่าสำหรับ MERGE หรือ @@ rowcount หรือไม่ ) แตกต่างจากที่ฉันขอเพราะฉันพยายามเพิ่มหลายแถวไปยังตาราง ฉันหวังว่าฉันจะใช้ชุดคำสั่งต่อไปนี้เพื่อเพิ่มค่าจาก xml แต่นี่จะไม่ทำงาน วิธีการนี้ควรทำงานเมื่ออินพุตเป็นแถวเดียว begin tran …

1
MySQL InnoDB Deadlock สำหรับการสืบค้นง่ายๆ 2 แบบ
ฉันมีการหยุดชะงักสำหรับข้อความค้นหาแทรกสองรายการนี้: insert into PlayerClub (modifiedBy, timeCreated, currentClubId, endingLevelPosition, nextClubId, account_id) values (0, '2014-12-23 15:47:11.596', 180, 4, 181, 561) insert into PlayerClub (modifiedBy, timeCreated, currentClubId, endingLevelPosition, nextClubId, account_id) values (0, '2014-12-23 15:47:11.611', 180, 4, 181, 563) นี่คือสถานะ InnoDB: ------------------------ LATEST DETECTED DEADLOCK ------------------------ 2014-12-23 15:47:11 1f4c *** (1) TRANSACTION: TRANSACTION 19896526, …
10 mysql  innodb  deadlock 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.