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

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

1
จะเช็คอินทริกเกอร์ได้อย่างไรถ้าทั้งแถวยังคงเหมือนเดิมหลังจากอัพเดท?
แน่นอนฉันสามารถทำได้สำหรับทุกคอลัมน์เปรียบเทียบเช่นนี้ if (old.column1 = new.column1 and old.column2 = new.column2...) แต่มันจะยากรหัส b และยากที่จะรักษาถ้าฉันเพิ่มคอลัมน์อื่นในอนาคตเช่น มีวิธีการตรวจสอบว่าคอลัมน์ทั้งหมดยังคงเหมือนเดิมหรือไม่โดยไม่ตรวจสอบทุกคอลัมน์ด้วยตนเอง?

2
ฉันจะถ่ายโอนข้อมูลตารางทั้งหมดไปยัง CSV สำหรับ schema PostgreSQL ได้อย่างไร
ฉันมีฐานข้อมูลที่มีสคีมาจำนวนมากอยู่ในนั้นและฉันต้องการที่จะถ่ายโอนข้อมูลแต่ละเนื้อหาของตารางไปยัง CSV ฉันตระหนักถึงคำสั่ง COPY แต่ฉันไม่แน่ใจว่าจะเขียนสคริปต์สิ่งที่จะอ่านตารางทั้งหมดใน schema และเรียกใช้ COPY กับพวกเขาได้อย่างไร
11 postgresql  backup  csv 

1
ปฏิเสธการอนุญาตเพื่อสร้าง“ pg_catalog.tablename” ในระหว่าง pg_dump ที่กำหนดเป้าหมายเครื่องอื่น
ฉันพยายามที่จะถ่ายโอนข้อมูลบางตารางจาก 9.5 เบต้า 2 ไปยังเซิร์ฟเวอร์ 9.4.4 รูปแบบของคำสั่งที่ฉันใช้นั้นเป็นมาตรฐานที่ค่อนข้างดี: pg_dump -t table dbname | psql -h hostname -d dbname ฉันใช้ผู้ใช้ Postgres ซึ่งฉันรู้ว่าอาจไม่เหมาะ แต่เนื่องจากทั้งสองนี้เป็นกล่องประมวลผลข้อมูล dev ที่ฉันใช้เท่านั้นและเกี่ยวข้องกับข้อผิดพลาดที่ตามมา เริ่มแรกฉันได้รับข้อผิดพลาด ข้อผิดพลาด: พารามิเตอร์การกำหนดค่าที่ไม่รู้จัก "row_security" ซึ่งคาดว่าเป็นคุณลักษณะนี้ใหม่ใน 9.5 และใช่ฉันรู้ว่าไม่แนะนำให้ใช้ pg_dump ระหว่างรุ่น Postgres ที่แตกต่างกัน แต่หลีกเลี่ยงไม่ได้อย่างน่าเศร้าเนื่องจากฉันได้พบข้อผิดพลาดที่คลุมเครือมากและต้องย้ายขนาดใหญ่ จำนวนข้อมูลคงที่หนึ่งครั้ง ดังนั้นการใช้แฮ็คที่น่าเกลียดนี้เพื่อลบข้อผิดพลาด row_security และการหยุดข้อผิดพลาดครั้งแรก: pg_dump -t tablemame dbname |sed 's/SET row_security = off;//'| psql -v …

1
วิธีรีเซ็ตสถิติหลังจากอัพเดตสถิติ ... ด้วย ROWCOUNT
สำหรับการปรับแต่งและวัตถุประสงค์ในการทดสอบแบบสอบถามคุณสามารถกำหนด rowcount และ PAGECOUNT UPDATE STATISTICSสถิติดัชนีของตารางโดยการเรียกใช้ แต่คุณจะคำนวณ / รีเซ็ตสถิติเป็นเนื้อหาจริงของตารางได้อย่างไร --- Create a table.. CREATE TABLE dbo.StatTest ( i int NOT NULL, CONSTRAINT PK_StatTest PRIMARY KEY CLUSTERED (i) ); GO --- .. and give it a thousand-or-so rows: DECLARE @i int=1; INSERT INTO dbo.StatTest (i) VALUES (@i); WHILE (@i<1000) BEGIN; INSERT …

4
วิธีเพิ่มคอลัมน์ที่มีข้อ จำกัด foreign key ไปยังตารางที่มีอยู่แล้ว?
ฉันมีตารางต่อไปนี้ CREATE TABLE users (id int PRIMARY KEY); -- already exists with data CREATE TABLE message (); ฉันจะเปลี่ยนmessagesตารางเช่นนั้นได้อย่างไร คอลัมน์ใหม่ที่เรียกว่าsenderถูกเพิ่มเข้าไป โดยที่senderเป็น foreign key อ้างอิงusersตาราง สิ่งนี้ไม่ทำงาน # ALTER TABLE message ADD FOREIGN KEY (sender) REFERENCES users; ERROR: column "sender" referenced in foreign key constraint does not exist คำสั่งนี้ไม่ได้สร้างคอลัมน์ด้วยหรือไม่?

2
ดัชนีแนวทางปฏิบัติที่ดีที่สุดที่ไม่ได้ใช้
จากแบบสอบถามนี้ถ้าฉันเห็นจำนวนการอ่านน้อย (ใกล้เคียงกับ 0 หรือ 0, เช่น 1 หรือ 2) และการอัปเดตผู้ใช้จำนวนมากหรือปานกลาง (ฉันไม่สามารถค้นหาแทรกหรือลบด้วยแบบสอบถามนี้) จำนวนแถวขนาดใหญ่ฉันควรลบดัชนีในทฤษฎี SELECT DISTINCT OBJECT_NAME(s.[object_id]) AS ObjectName , p.rows TableRows , i.name AS [INDEX NAME] , (user_seeks + user_scans + user_lookups) AS TotalReads , user_updates UserUpdates FROM sys.dm_db_index_usage_stats s INNER JOIN sys.indexes i ON i.[object_id] = s.[object_id] AND i.index_id = …

6
ประโยชน์ที่เป็นไปได้ของการจัดเก็บค่าหลายค่าในหนึ่งฟิลด์ของหนึ่งแถวแทนที่จะแยกเป็นแถว
ในระหว่างการประชุมรายสัปดาห์ครั้งล่าสุดของเราบุคคลที่ไม่มีประสบการณ์ด้านการบริหารฐานข้อมูลได้นำคำถามนี้มาใช้: "จะมีสถานการณ์สมมติที่จัดเก็บข้อมูลในบรรทัด (สตริง) แทนที่จะแสดงหลายบรรทัดหรือไม่" ให้เราสมมติตารางcountryStatesที่เราต้องการจัดเก็บสถานะของประเทศ ฉันจะใช้ USA เป็นตัวอย่างนี้และจะไม่แสดงรายการรัฐทั้งหมดเพื่อความเกียจคร้าน ที่นั่นเราจะมีสองคอลัมน์ หนึ่งเรียกว่าCountryและอื่น ๆ Statesที่เรียกว่า ตามที่กล่าวไว้ที่นี่และที่เสนอโดยของ @ srutzky คำตอบที่PKจะได้รับรหัสที่กำหนดโดยมาตรฐาน ISO 3166-1 alpha-3 ตารางของเราจะเป็นดังนี้: +---------+-----------------------+-------------------------------------------------------+ | Country | States | StateName | +---------+-----------------------+-------------------------------------------------------+ | USA | AL, CA, FL,OH, NY, WY | Alabama, California, Florida, Ohio, New York, Wyoming | +---------+-----------------------+-------------------------------------------------------+ เมื่อถามคำถามเดียวกันนี้ให้กับนักพัฒนาเพื่อนเขากล่าวว่าจากมุมมองขนาดทราฟฟิกข้อมูลนี่อาจมีประโยชน์ แต่ไม่ใช่ถ้าเราจำเป็นต้องจัดการข้อมูลนี้ ในกรณีนี้จะต้องมีความฉลาดในรหัสแอปพลิเคชันซึ่งสามารถแปลงสตริงนี้ในรายการ …

3
Schema Migration: เครื่องมือข้อมูลเซิร์ฟเวอร์ SQL เทียบกับ Liquibase และ Flyway
นี่อาจดูเหมือนคำถามงี่เง่า แต่ฉันได้ดูวิธีแก้ไขปัญหาโอเพนซอร์ซสำหรับการโยกย้ายสคีมาคือ Liquibase และ Flyway อย่างไรก็ตามเจ้านายของฉันบอกฉันว่า SQL Server Data Tools (SSDT) ​​ประสบความสำเร็จในงานเดียวกัน ฉันไม่แน่ใจว่าตกลง แต่ฉันพบน้อยมากบนอินเทอร์เน็ตที่เปรียบเทียบโดยตรงกับ Liquibase และ / หรือ Flyway มุมมองของฉันคือ SSDT เป็นเครื่องมือในการพัฒนาการสร้างแบบจำลองข้อมูลและการออกแบบสำหรับ SQL Server และยังสนับสนุนการเปรียบเทียบสคีมา (และการสร้างสคริปต์ของมัน) และการควบคุมแหล่งที่มา มันจัดการกับปัญหาที่แตกต่างกันแม้ว่าอาจมีเหลื่อมซ้อนกับ Liquibase / Flyway ในบางแง่มุมของการโยกย้ายสคีมา แต่ในฐานะที่เป็นเครื่องมือในการโยกย้ายสคีมาโดยรวม Liquibase และ Flyway เป็นเครื่องมือที่ทุ่มเทอย่างเต็มที่ในขณะที่ SSDT นั้นมีความสำคัญมากกว่าสำหรับการออกแบบและพัฒนาฐานข้อมูล ความคิดเห็นใด ๆ ที่จะได้รับการชื่นชมมากแม้ว่ามันจะบอกว่าไม่มีการเปรียบเทียบและ SSDT ไม่ใช่เครื่องมือโยกย้ายสคีมาต่อ
11 schema  ssdt  migration 

3
การประเมินความผิดปกติที่ไม่ดีทำให้ขาดคุณสมบัติ INSERT จากการบันทึกที่น้อยที่สุด?
ทำไมข้อความที่สองINSERT~ 5x ช้ากว่าประโยคแรก จากจำนวนข้อมูลบันทึกที่สร้างขึ้นฉันคิดว่าข้อมูลที่สองไม่ผ่านการรับรองสำหรับการบันทึกขั้นต่ำ อย่างไรก็ตามเอกสารประกอบในคู่มือประสิทธิภาพการโหลดข้อมูลระบุว่าส่วนแทรกทั้งสองควรสามารถบันทึกได้น้อยที่สุด ดังนั้นหากการบันทึกขั้นต่ำเป็นความแตกต่างของประสิทธิภาพที่สำคัญทำไมจึงเป็นไปได้ว่าการสืบค้นครั้งที่สองไม่มีคุณสมบัติสำหรับการบันทึกขั้นต่ำ สิ่งที่สามารถทำได้เพื่อปรับปรุงสถานการณ์? Query # 1: การแทรกแถว 5 มม. โดยใช้ INSERT ... with (TABLOCK) พิจารณาแบบสอบถามต่อไปนี้ซึ่งแทรกแถว 5MM ลงในกอง แบบสอบถามนี้ดำเนินการใน1 secondและสร้างข้อมูลล็อกธุรกรรมตามการรายงานของ64MBsys.dm_tran_database_transactions CREATE TABLE dbo.minimalLoggingTest (n INT NOT NULL) GO INSERT INTO dbo.minimalLoggingTest WITH (TABLOCK) (n) SELECT n -- Any table/view/sub-query that correctly estimates that it will generate 5MM …

2
ฉันควรใช้ UUID เช่นเดียวกับ ID
ฉันใช้ UUID ในระบบของฉันมาระยะหนึ่งแล้วด้วยเหตุผลหลายประการตั้งแต่การบันทึกไปจนถึงความสัมพันธ์ที่ล่าช้า รูปแบบที่ฉันใช้เปลี่ยนไปเมื่อฉันไร้เดียงสาน้อยลงจาก: VARCHAR(255) VARCHAR(36) CHAR(36) BINARY(16) เมื่อฉันไปถึงขั้นสุดท้ายBINARY(16)ที่ฉันเริ่มเปรียบเทียบประสิทธิภาพกับจำนวนเต็มพื้นฐานที่เพิ่มขึ้นอัตโนมัติ การทดสอบและผลลัพธ์แสดงไว้ด้านล่าง แต่ถ้าคุณต้องการสรุปก็แสดงว่าINT AUTOINCREMENTและBINARY(16) RANDOMมีประสิทธิภาพเหมือนกันในช่วงข้อมูลสูงสุด 200,000 (ฐานข้อมูลถูกเติมข้อมูลล่วงหน้าก่อนการทดสอบ) ตอนแรกฉันสงสัยว่าจะใช้ UUID เป็นคีย์หลักและแน่นอนฉันก็ยังอยู่ แต่ฉันเห็นศักยภาพที่นี่เพื่อสร้างฐานข้อมูลที่ยืดหยุ่นที่สามารถใช้ทั้งสองได้ ในขณะที่หลายคนเครียดกับข้อได้เปรียบของทั้งสองข้อเสียอะไรที่ถูกยกเลิกโดยการใช้ข้อมูลทั้งสองชนิด? PRIMARY INT UNIQUE BINARY(16) กรณีการใช้งานสำหรับการตั้งค่าประเภทนี้จะเป็นคีย์หลักดั้งเดิมสำหรับความสัมพันธ์ระหว่างตารางโดยมีตัวระบุเฉพาะที่ใช้สำหรับความสัมพันธ์ระหว่างระบบ สิ่งที่ฉันพยายามค้นพบเป็นหลักคือประสิทธิภาพที่แตกต่างระหว่างสองแนวทาง นอกเหนือจากพื้นที่ดิสก์สี่เท่าที่ใช้ซึ่งอาจเล็กน้อยมากหลังจากเพิ่มข้อมูลเพิ่มเติมพวกเขาดูเหมือนจะเหมือนกัน schema: -- phpMyAdmin SQL Dump -- version 4.0.10deb1 -- http://www.phpmyadmin.net -- -- Host: localhost -- Generation Time: Sep 22, 2015 at 10:54 AM …

3
คำแนะนำ NOLOCK เปลี่ยนลำดับของบันทึกที่ส่งคืน
มีดัชนีคลัสเตอร์บนโต๊ะเป็นฟิลด์ClientLastName เมื่อฉันเพียงแค่ถ่ายโอนข้อมูลทั้งหมดจากตารางข้อมูลเหล่านั้นจะปรากฏตามลำดับตัวอักษรเว้นแต่(nolock)จะมีการใช้คำใบ้ในแบบสอบถามที่เป็นปัญหา คำใบ้นั้นเปลี่ยนลำดับของบันทึก ควรเป็น?. ฉันมั่นใจว่าไม่มีเซสชันอื่นที่มีธุรกรรมเปิดที่มีการเปลี่ยนแปลงในตารางนั้น (อย่างน้อยsp_who2ก็ไม่แสดงให้ฉันเห็น) ความแตกต่างในการสั่งซื้อสามารถอธิบายได้อย่างไร ดึงข้อมูลเพิ่มเติมจากความคิดเห็น: ไม่มีคำสั่งซื้อโดย ดัชนีที่ไม่ใช่คลัสเตอร์ควรบังคับใช้คำสั่งหรือไม่ คิวรียังคงส่งคืนคำสั่งซื้อที่แตกต่างกันแม้ว่าจะใช้คำใบ้ดัชนีที่ระบุดัชนีคลัสเตอร์ พวกเขาควร? ฉันสงสัยว่าทำไมnolockการเปลี่ยนแปลงลำดับของระเบียนที่ส่งคืนโดยไม่มีการเปลี่ยนแปลงแผน ฉันทำ WinDiff กับพวกเขา - เหมือนกันยกเว้น [the] (nolock)[คำใบ้แบบสอบถาม]

3
ไม่รวมตารางเฉพาะจากการปรับใช้ SSDT
dboฉันมีฐานข้อมูลที่มีอยู่กับทุกอย่างในสคี ฉันมีโครงการ SSDT พร้อมวัตถุที่ฉันเพิ่มด้วยสกีมาfoo ฉันมีตารางที่มีลักษณะเช่นนี้ในโครงการ: CREATE table foo.a ( id INT NOT NULL CONSTRAINT [PK_foo_a] PRIMARY KEY CLUSTERED CONSTRAINT [FK_foo_a] FOREIGN KEY REFERENCES [dbo].[a], desc NVARCHAR(50) NOT NULL ) มันขึ้นอยู่กับ dbo.a dbo.a มีคอลัมน์จำนวนมากซึ่งเป็นคีย์ต่างประเทศไปยังคอลัมน์อื่น ๆ คนอื่น (ผู้ที่รักษาสคีมาเริ่มต้น) อาจเปลี่ยน dbo.a ฉันต้องการเก็บ dbo.a อย่างง่าย ๆ เป็น: CREATE table dbo.a ( id INT NOT …
11 ssdt  deployment 

2
การติดตามผู้ใช้ปัจจุบันผ่านมุมมองและทริกเกอร์ใน PostgreSQL
ฉันมีฐานข้อมูล PostgreSQL (9.4) ที่ จำกัด การเข้าถึงระเบียนขึ้นอยู่กับผู้ใช้ปัจจุบันและติดตามการเปลี่ยนแปลงที่ทำโดยผู้ใช้ สิ่งนี้ทำได้โดยการดูและทริกเกอร์และส่วนใหญ่ทำงานได้ดี แต่ฉันมีปัญหากับมุมมองที่ต้องมีINSTEAD OFทริกเกอร์ ฉันพยายามลดปัญหาลง แต่ฉันต้องขออภัยล่วงหน้าว่านี่ยังค่อนข้างนาน สถานการณ์ การเชื่อมต่อกับฐานข้อมูลทั้งหมดที่ทำจากเว็บ front-end dbwebผ่านบัญชีเดียว เมื่อเชื่อมต่อบทบาทที่มีการเปลี่ยนแปลงทางเพื่อให้สอดคล้องกับคนที่ใช้อินเตอร์เฟซเว็บและทุกบทบาทดังกล่าวอยู่ในบทบาทของกลุ่มSET ROLE dbuser(ดูคำตอบนี้สำหรับรายละเอียด) aliceสมมติว่าผู้ใช้ ส่วนใหญ่ของตารางของฉันจะอยู่ในสคีมาที่นี่ผมจะโทรหาและอยู่ในprivate dbownerตารางเหล่านี้ไม่สามารถเข้าถึงได้โดยตรงไปแต่จะไปอีกบทบาทหนึ่งdbuser dbviewเช่น: SET SESSION AUTHORIZATION dbowner; CREATE TABLE private.incident ( incident_id serial PRIMARY KEY, incident_name character varying NOT NULL, incident_owner character varying NOT NULL ); GRANT ALL ON TABLE private.incident …


2
ปรับการค้นหาให้เหมาะสมสำหรับ 25+ ล้านแถว
ฉันใช้ MS SQL และฉันต้องเรียกใช้แบบสอบถามหลายรายการในตารางเดียวกันในเกณฑ์ที่แตกต่างกัน ตอนแรกฉันเรียกใช้แบบสอบถามแต่ละรายการในตารางเดิมแม้ว่าพวกเขาทั้งหมดแชร์การกรองบางอย่าง (เช่นวันที่สถานะ) การดำเนินการนี้ใช้เวลานาน (ประมาณ 2 นาที) มีข้อมูลที่ซ้ำกันในแถวข้อมูลและดัชนีทั้งหมดไม่ได้เป็นคลัสเตอร์ ฉันสนใจเฉพาะคอลัมน์ 4 คอลัมน์สำหรับเกณฑ์ของฉันและผลลัพธ์ควรให้ผลลัพธ์การนับเท่านั้นสำหรับการค้นหาทั้งหมด คอลัมน์ที่ต้องการ: TABLE, FIELD, AFTER, DATEและมีดัชนีในแต่ละและDATETABLE หลังจากสร้างตารางชั่วคราวที่มีเฉพาะฟิลด์ที่ฉันต้องการมันลงไปเป็นเวลา 1:40 นาทีซึ่งยังแย่มาก CREATE TABLE #TEMP ( TABLE VARCHAR(30) NULL, FIELD VARCHAR(30) NULL, AFTER VARCHAR(1000) NULL, DATE DATETIME, SORT_ID INT IDENTITY(1,1) ) CREATE CLUSTERED INDEX IX_ADT ON #TEMP(SORT_ID) INSERT INTO #TEMP …

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