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

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

2
วิธีการจัดเก็บการประทับเวลาใน PostgreSQL ที่ดีที่สุด
ฉันกำลังทำงานกับการออกแบบฐานข้อมูล PostgreSQL และฉันสงสัยว่าวิธีที่ดีที่สุดในการจัดเก็บการประทับเวลา สมมติฐาน ผู้ใช้ในเขตเวลาที่แตกต่างกันจะใช้ฐานข้อมูลสำหรับฟังก์ชั่น CRUD ทั้งหมด ฉันดูที่ 2 ตัวเลือก: timestamp NOT NULL DEFAULT (now() AT TIME ZONE 'UTC') bigint NOT NULL DEFAULT สำหรับtimestampฉันจะส่งสตริงที่จะแสดงเวลาที่แน่นอน (UTC) สำหรับช่วงเวลา INSERT สำหรับbigintฉันจะเก็บสิ่งเดียวกันแน่นอน แต่ในรูปแบบตัวเลข (ปัญหาเกี่ยวกับเขตเวลาได้รับการจัดการก่อนที่จะส่งมิลลิวินาทีไปยังเซิร์ฟเวอร์ดังนั้นมิลลิวินาทีใน UTC ทุกครั้ง) ข้อได้เปรียบหลักอย่างหนึ่งของการจัดเก็บ a bigintอาจเป็นไปได้ว่าจะเป็นการง่ายกว่าในการจัดเก็บและดึงข้อมูลเนื่องจากการส่งผ่านการประทับเวลาที่จัดรูปแบบอย่างถูกต้องนั้นมีความซับซ้อนมากกว่าตัวเลขง่าย ๆ คำถามของฉันคือสิ่งที่จะช่วยให้การออกแบบที่ยืดหยุ่นที่สุดและสิ่งที่อาจเป็นข้อผิดพลาดของแต่ละวิธี

2
แบบสอบถามแบบยาวของ Postgres ถูกยกเลิกหรือไม่หากการเชื่อมต่อขาดหายไป
ถ้าฉันเปิดการเชื่อมต่อกับ Postgres และออกแบบสอบถามที่ใช้เวลานานแล้วหยุดการเชื่อมต่อ (เช่นฆ่ากระบวนการไคลเอนต์ที่เปิดการเชื่อมต่อ) แบบสอบถามที่ใช้เวลานานจะยังคงทำงานต่อไปหรือจะถูกยกเลิกโดยอัตโนมัติหรือไม่ สามารถกำหนดค่านี้ได้หรือไม่ (ฉันใช้ Postgresql 9.2.9)

2
การตรวจจับตารางหรือแถวที่ถูกล็อคใน SQL Server
ฉันกำลังพยายามทำความเข้าใจ / เรียนรู้วิธีติดตามรายละเอียดของเซสชันที่ถูกบล็อก ดังนั้นฉันจึงสร้างการตั้งค่าต่อไปนี้: create table foo (id integer not null primary key, some_data varchar(20)); insert into foo values (1, 'foo'); commit; ตอนนี้ฉันเชื่อมต่อกับฐานข้อมูลสองครั้งจากลูกค้าที่แตกต่างกันสองคน ปัญหาเซสชั่นแรก: begin transaction update foo set some_data = 'update' where id = 1; ฉันไม่ได้กระทำอย่างชัดเจนเพื่อรักษาล็อค ในเซสชั่นที่สองฉันออกคำสั่งเดียวกันและแน่นอนว่าหนึ่งรอเนื่องจากการล็อค ตอนนี้ฉันกำลังพยายามใช้คิวรี่ที่ต่างกันเพื่อดูว่าเซสชัน 2 กำลังรอfooตารางอยู่ sp_who2 แสดงต่อไปนี้ (ฉันลบบางคอลัมน์เพื่อแสดงเฉพาะข้อมูลสำคัญ): SPID | สถานะ | BlkBy | …

5
ทำไม datetime การค้นหาของฉันจึงไม่ตรงกัน
select * from A where posted_date >= '2015-07-27 00:00:00.000' and posted_date <= '2015-07-27 23:59:59.999' แต่ผลลัพธ์มีบันทึกที่โพสต์วันนี้: 2015-07-28 เซิร์ฟเวอร์ฐานข้อมูลของฉันไม่ได้อยู่ในประเทศของฉัน อะไรคือปัญหา ?

4
ตัวช่วยสร้างการคืนค่า SQL Server 2012 หยุดทำงาน
ฉันมีแล็ปท็อปสำหรับการพัฒนาที่มี SSMS Express 2012 พร้อมอินสแตนซ์ 2012 db และอินสแตนซ์ 2008 db ใช้การกำหนดค่านี้มานานกว่าหนึ่งปีแล้ว ทันใดนั้นฉันไม่สามารถใช้ตัวช่วยการคืนค่าได้ ตัวช่วยจะเลือกไฟล์สำรอง แต่เมื่อฉันเลือกตัวเลือก "ไฟล์" ที่ด้านบนซ้ายเพื่อกำหนดตำแหน่งของ MDF และ LDF กล่องโต้ตอบจะหยุดทำงาน ฉันพยายามซ่อมไม่มีโชค
20 sql-server 

1
ไม่แสดงพรอมต์ SSMS เพื่อบันทึกการเปลี่ยนแปลง
เป็นไปได้หรือไม่ที่จะกำหนดค่า SQL Server Management Studio (SSMS) เพื่อให้กล่องโต้ตอบที่แสดงด้านบนไม่ปรากฏขึ้นเมื่อฉันปิดหน้าต่างแบบสอบถามที่ไม่ได้บันทึก?

1
การออกแบบฐานข้อมูล: ความสัมพันธ์ 1 ถึง 2 หลายรายการไปยังตารางเดียวกัน
ฉันต้องสร้างแบบจำลองสถานการณ์ที่ฉันมีตาราง Chequing_Account (ซึ่งมีงบประมาณหมายเลข iban และรายละเอียดอื่น ๆ ของบัญชี) ซึ่งจะต้องเกี่ยวข้องกับสองตารางที่แตกต่างกัน Person and Corporation ซึ่งทั้งสองสามารถมีบัญชี chequing 0, 1 หรือหลายบัญชี กล่าวอีกนัยหนึ่งฉันมีความสัมพันธ์แบบ 1 ต่อ 2 สองความสัมพันธ์กับบัญชี Chequing ตารางเดียวกัน ฉันต้องการฟังวิธีแก้ไขปัญหานี้ซึ่งเป็นไปตามข้อกำหนดการทำให้เป็นมาตรฐาน โซลูชันส่วนใหญ่ที่ฉันเคยได้ยินคือ: 1) ค้นหาเอนทิตีทั่วไปที่ทั้ง Person และ Corporation อยู่และสร้างตารางเชื่อมโยงระหว่างตารางนี้กับตาราง Chequing_Account สิ่งนี้ไม่สามารถทำได้ในกรณีของฉันและแม้ว่าฉันต้องการแก้ไขปัญหาทั่วไปไม่ใช่อินสแตนซ์เฉพาะนี้ 2) สร้างตารางเชื่อมโยงสองตาราง PersonToChequingAccount และ CorporationToChequingAccount ซึ่งเกี่ยวข้องกับสองเอนทิตีกับบัญชี Chequing อย่างไรก็ตามฉันไม่ต้องการให้บุคคลสองคนมีบัญชี chequing เดียวกันและฉันไม่ต้องการให้บุคคลธรรมดาและ บริษัท แบ่งปันบัญชี chequing! เห็นภาพนี้ 3) สร้างกุญแจต่างประเทศสองใบในบัญชี Chequing …

1
ฉันควรตื่นตระหนกโดยคำเตือน NO NO JOIN PREDICATE หรือไม่?
ฉันกำลังแก้ไขปัญหาบิตและชิ้นส่วนของกระบวนงานที่เก็บไว้ที่มีประสิทธิภาพต่ำ ส่วนนี้ของขั้นตอนการส่งคำเตือน NO JOIN PREDICATE select method = case methoddescription when 'blah' then 'Ethylene Oxide' when NULL then 'N/A' else methoddescription end, testmethod = case methoddescription when 'blah' then 'Biological Indicators' when NULL then 'N/A' else 'Dosimeter Reports' end, result = case when l.res is null or l.res <> 1 …

3
การย้ายข้อมูล postgresql ไปยังไดรฟ์อื่น
ฉันใช้ AWS เป็นสภาพแวดล้อมคลาวด์ของฉัน ฉันติดตั้ง PostgreSQL บนไดรฟ์เดียวกันกับไดรฟ์ข้อมูลอินสแตนซ์รูทของฉัน ฉันได้แนบและติดตั้งไดรฟ์ที่สองกับอินสแตนซ์ของฉัน ตอนนี้ฉันต้องการย้ายข้อมูล PostgreSQL ทั้งหมดไปยังไดรฟ์อื่น ฉันยังอยู่ในโหมดการพัฒนาดังนั้นฉันสามารถลบข้อมูลเก่าได้ถ้ามันทำให้การถ่ายโอนง่ายขึ้น ณ จุดนี้ วิธีที่ดีที่สุดในการทำเช่นนี้คืออะไร? PostgreSQL tablespace เป็นสิ่งที่ฉันควรดูหรือไม่

3
ผลลัพธ์ที่ถูกต้องสำหรับแบบสอบถามนี้คืออะไร
ฉันเจอปริศนานี้ในความคิดเห็นที่นี่ CREATE TABLE r (b INT); SELECT 1 FROM r HAVING 1=1; SQL ServerและPostgreSQLส่งคืน 1 แถว MySQLและOracleคืนค่าศูนย์แถว อันไหนถูกต้อง? หรือทั้งสองอย่างนั้นถูกต้องเท่าเทียมกัน?

2
การหักสิทธิ์ NTFS สำหรับ SQLEXPRESS $ MSSQL
ฉันได้รับการ "รักษาความปลอดภัย" เซิร์ฟเวอร์ฐานข้อมูลของเรา ในการทำเช่นนี้ฉันได้ลบการอนุญาตบางส่วนออกจากโฟลเดอร์ที่ติดตั้ง SQL Express ไว้ D:\SQL D:\SQL\Data D:\SQL\Backup etc.. ฉันได้รับอนุญาตในโฟลเดอร์ Data เหมือนเดิม แต่ฉันได้ลบสิ่งที่ฉันคิดว่าไม่ต้องการออกจากคนอื่น ตอนนี้ฉันไม่สามารถสำรองฐานข้อมูล หากฉันลองเลือกตำแหน่งสำรองข้อมูลไดอะล็อกจะไม่แสดงข้อมูลใด ๆ ในโฟลเดอร์ d: \ SQL และถ้าฉันใส่เส้นทางด้วยตัวเองมันจะบอกสิ่งนี้กับฉัน: - ไม่สามารถเข้าถึงพา ธ หรือไฟล์ที่ระบุบนเซิร์ฟเวอร์ ตรวจสอบว่าคุณมีสิทธิ์การรักษาความปลอดภัยที่จำเป็นและมีเส้นทางและไฟล์อยู่ ... ดูเหมือนว่าปัญหาการอนุญาตโฟลเดอร์ การกำหนดค่าเซิร์ฟเวอร์อื่นในทำนองเดียวกันมีพวงของ "อนุญาตให้" สิทธิ์สำหรับบัญชีที่เรียกว่า " MSSQL$SQLEXPRESS" (ซึ่งฉันรู้ว่าฉันลบ) แต่ฉันไม่สามารถเพิ่มสิทธิ์เหล่านี้เพราะไม่มีเช่นกลุ่ม , ผู้ใช้หรือสร้าง - ในหลักการความปลอดภัยบนเซิร์ฟเวอร์ ฉันจะเพิ่มการอนุญาตสำหรับMSSQL$SQLEXPRESSบัญชีนี้ได้อย่างไร

2
คุณสามารถอธิบายแผนการดำเนินการนี้ได้หรือไม่
ฉันกำลังค้นคว้าอย่างอื่นเมื่อฉันเจอสิ่งนี้ ฉันกำลังสร้างตารางทดสอบที่มีข้อมูลอยู่ในนั้นและเรียกใช้คิวรีที่แตกต่างกันเพื่อค้นหาว่าวิธีการเขียนคิวรีต่างกันมีผลต่อแผนการดำเนินการอย่างไร นี่คือสคริปต์ที่ฉันใช้ในการสร้างข้อมูลทดสอบแบบสุ่ม: IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID('t') AND type in (N'U')) DROP TABLE t GO CREATE TABLE t ( c1 int IDENTITY(1,1) NOT NULL ,c2 int NULL ) GO insert into t select top 1000000 a from (select t1.number*2048 + t2.number a, newid() b …

2
วิธีสร้างดัชนีเพื่อเพิ่มความเร็วการสืบค้น LIKE รวมในนิพจน์
ฉันอาจจะถามคำถามผิดในชื่อเรื่อง นี่คือข้อเท็จจริง: กลุ่มบริการลูกค้าของฉันร้องเรียนเกี่ยวกับเวลาตอบสนองที่ช้าเมื่อทำการค้นหาลูกค้าในอินเทอร์เฟซการจัดการของเว็บไซต์ Django ของเรา เรากำลังใช้ Postgres 8.4.6 ฉันเริ่มบันทึกการสืบค้นที่ช้าและค้นพบผู้ร้ายนี้: SELECT COUNT(*) FROM "auth_user" WHERE UPPER("auth_user"."email"::text) LIKE UPPER(E'%deyk%') การค้นหานี้ใช้เวลานานกว่า 32 วินาทีในการเรียกใช้ นี่คือแผนแบบสอบถามที่จัดทำโดยอธิบาย: QUERY PLAN Aggregate (cost=205171.71..205171.72 rows=1 width=0) -> Seq Scan on auth_user (cost=0.00..205166.46 rows=2096 width=0) Filter: (upper((email)::text) ~~ '%DEYK%'::text) เนื่องจากนี่เป็นแบบสอบถามที่สร้างขึ้นโดย Django ORM จาก Django QuerySet ที่สร้างโดยแอปพลิเคชัน Django Admin ฉันจึงไม่สามารถควบคุมแบบสอบถามได้ ดัชนีดูเหมือนว่าโซลูชันเชิงตรรกะ …

7
ฉันจะบังคับให้หนึ่งระเบียนมีค่าจริงสำหรับคอลัมน์บูลีนและค่าอื่น ๆ ทั้งหมดเป็นค่าเท็จได้อย่างไร
ฉันต้องการบังคับใช้ว่ามีเพียงระเบียนเดียวในตารางที่ถือว่าเป็นค่า "เริ่มต้น" สำหรับคิวรีหรือมุมมองอื่นที่อาจเข้าถึงตารางนั้น โดยพื้นฐานแล้วฉันต้องการรับประกันว่าแบบสอบถามนี้จะส่งคืนแถวเดียวเสมอ: SELECT ID, Zip FROM PostalCodes WHERE isDefault=True ฉันจะทำเช่นนั้นใน SQL ได้อย่างไร


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