คำถามติดแท็ก postgresql

PostgreSQL ทุกรุ่น เพิ่มแท็กเฉพาะรุ่นเพิ่มเติมเช่น postgresql-11 หากบริบทนั้นสำคัญ

1
การตั้งชื่อความขัดแย้งระหว่างฟังก์ชั่นพารามิเตอร์และผลลัพธ์ของการเข้าร่วมกับการใช้ข้อ
รับการตั้งค่านี้ใน Postgres ปัจจุบัน 9.4 ( จากคำถามที่เกี่ยวข้อง ): CREATE TABLE foo (ts, foo) AS VALUES (1, 'A') -- int, text , (7, 'B'); CREATE TABLE bar (ts, bar) AS VALUES (3, 'C') , (5, 'D') , (9, 'E'); นอกจากนี้ยังมีซอ Fiddleจากคำถามก่อนหน้านี้ ฉันเขียนSELECTด้วยFULL JOINเพื่อให้บรรลุวัตถุประสงค์ของคำถามอ้างอิง ย่อ: SELECT ts, f.foo, b.bar FROM foo f FULL …

3
PostgreSQL ความพร้อมใช้งาน / ความสามารถในการปรับขนาดสูงโดยใช้ HAProxy และ PGBouncer
ฉันมีเซิร์ฟเวอร์ PostgreSQL หลายเครื่องสำหรับเว็บแอปพลิเคชัน โดยทั่วไปแล้วจะเป็นทาสหลักและทาสหลายคนในโหมดฮอตสแตนบาย (การจำลองการส่งกระแสข้อมูลแบบอะซิงโครนัส) ฉันใช้ PGBouncer สำหรับการรวมการเชื่อมต่อ: หนึ่งอินสแตนซ์ที่ติดตั้งบนเซิร์ฟเวอร์ PG แต่ละตัว (พอร์ต 6432) เชื่อมต่อกับฐานข้อมูลบน localhost ฉันใช้โหมดกลุ่มธุรกรรม ในการโหลดการเชื่อมต่อแบบอ่านอย่างเดียวของฉันกับทาสฉันใช้ HAProxy (v1.5) กับ conf มากกว่าหรือน้อยกว่าเช่นนี้ listen pgsql_pool 0.0.0.0:10001 mode tcp option pgsql-check user ha balance roundrobin server master 10.0.0.1:6432 check backup server slave1 10.0.0.2:6432 check server slave2 10.0.0.3:6432 check server slave3 10.0.0.4:6432 check …

1
วิธีแปลงเวลา unix เป็น Timstamp ของ PostgreSQL โดยไม่มี timezome
ฉันมีฐานข้อมูล PostgreSQL ทำงานบนเซิร์ฟเวอร์ที่ตั้งค่าเขตเวลาเป็นโซนเวลาของอินเดีย (เช่น UTC +5: 30) ฉันมีข้อมูลบางอย่างในตารางที่สร้างเช่นนี้ CREATE TABLE "CLOUDDATA" ( "CD_Tm_Obs" timestamp without time zone, "CD_Avg_Cloud" double precision ) ฉันต้องการสืบค้นข้อมูลและรับค่าตามเวลาที่กำหนด อินพุตของฉันจะเป็น Unix Timestamp (เช่นวินาทีจาก 1 มกราคม 1970) select to_timestamp(TRUNC(CAST(1395036000 AS bigint)))วิธีเดียวของการแปลงเวลายูนิกซ์การประทับเวลาที่ฉันได้พบคือ: แต่สิ่งนี้สร้างการประทับเวลาด้วยเขตเวลา ข้อมูลของฉันอยู่ในtimestamp without time zoneดังนั้นฉันไม่ได้รับผลลัพธ์ใด ๆ วิธีการแปลงเวลา unix เป็น Timstamp ของ PostgreSQL โดยไม่มี timezome?

3
ทำไม Postgres UPDATE ใช้เวลา 39 ชั่วโมง
ฉันมีตาราง Postgres ที่มีแถวประมาณ 2.1 ล้านแถว ฉันวิ่งไปตามการอัพเดทด้านล่าง: WITH stops AS ( SELECT id, rank() OVER (ORDER BY offense_timestamp, defendant_dl, offense_street_number, offense_street_name) AS stop FROM consistent.master WHERE citing_jurisdiction=1 ) UPDATE consistent.master SET arrest_id=stops.stop FROM stops WHERE master.id = stops.id; แบบสอบถามนี้ใช้เวลา 39 ชั่วโมงในการทำงาน ฉันใช้สิ่งนี้กับโปรเซสเซอร์แล็ปท็อป Core i7 Q720 4 ตัว (จริง) RAM จำนวนมากไม่มีอะไรที่ใช้เวลาส่วนใหญ่อีกต่อไป ไม่มีข้อ …
17 postgresql 

3
เป็นไปได้ไหมที่จะ จำกัด การหมดเวลาบนเซิร์ฟเวอร์ Postgres?
ฉันตั้งค่าการเชื่อมต่อและหมดเวลาคำสั่งเป็น 10 นาทีในแอปพลิเคชันของฉัน (ฝั่งไคลเอ็นต์) กว่าใบสมัครของฉันเรียกใช้แบบสอบถามง่าย ๆ : SELECT pg_sleep(65) ในบางเซิร์ฟเวอร์มันใช้งานได้ดี แต่เซิร์ฟเวอร์อื่นปิดการเชื่อมต่อหลังจาก 60 วินาที นี่อาจเป็นประเภทของการกำหนดค่าเซิร์ฟเวอร์ PostgreSQL ซึ่ง จำกัด การหมดเวลาและละเว้นการตั้งค่าไคลเอ็นต์ของฉันหรือไม่

2
ปฏิเสธสิทธิ์ในการพยายามนำเข้า
เมื่อฉันพยายามที่จะใช้\iในไฟล์ที่ไม่อยู่ใน psql.exe C:: permission deniedที่โฟลเดอร์ที่มันพูดว่า เช่นฉันมีไฟล์ที่มีคำสั่ง SQL ที่C:\Users\Work\Desktop\School Work\load_database.sqlและเมื่อฉันพิมพ์มันบอกว่า\i "C:\Users\Work\Desktop\School Work\load_database.sql" C:: permission deniedฉันจะแก้ไขสิ่งนี้ได้อย่างไร ฉันพบการทำงานที่นี่ที่คุณคัดลอกไฟล์. sql ไปยังโฟลเดอร์เดียวกันกับ psql.exe โดยวิธีการที่\ ฉันยืนสำหรับการนำเข้า?

2
วิธีการทำซ้ำฐานข้อมูลใน postgresql
ฉันต้องการทำซ้ำฐานข้อมูลที่มีอยู่รวมถึงสคีมาและโครงสร้างไปยังฐานข้อมูลใหม่อื่น ฉันต้องการสิ่งนี้ในสภาพแวดล้อมคำสั่งเชลล์และไม่อยู่ใน pgadmin ได้โปรดช่วยฉันด้วย nohup pg_dump exampledb > example-01.sql createdb -O postgres exampledbclone_01 ผู้ใช้ของฉันคือ "postgres" nohup psql exampledbclone_01 < example-01.sql $ pg_dump mydb > db.sql $ psql -d newdb -f db.sql
17 postgresql 

1
ข้อผิดพลาด Postgres [คอลัมน์จะต้องปรากฏในกลุ่มตามข้อหรือใช้ในฟังก์ชั่นรวม] เมื่อใช้แบบสอบถามย่อย
ฉันมีสองตารางและemployee phonesพนักงานสามารถมีหมายเลขโทรศัพท์ 0 ถึง n ฉันต้องการแสดงชื่อพนักงานพร้อมหมายเลขโทรศัพท์ ฉันใช้แบบสอบถามด้านล่างซึ่งทำงานได้ดี SELECT empname,array_agg(phonenumber) AS phonenumbers FROM employee LEFT OUTER JOIN phones ON employee.empid = phones.empid GROUP BY employee.empid ตารางพนักงานอาจมีแถวจำนวนมาก ฉันต้องการเรียกพนักงานเพียงบางคนในเวลาเดียวกัน ตัวอย่างเช่นฉันต้องการเรียกพนักงาน 3 คนด้วยหมายเลขโทรศัพท์ของพวกเขา ฉันพยายามเรียกใช้แบบสอบถามนี้ SELECT empname,array_agg(phonenumber) AS phonenumbers FROM (SELECT * FROM employee ORDER BY empname LIMIT 3 OFFSET 0) AS employee LEFT OUTER …

7
มีเครื่องมือที่ดีสำหรับการตรวจสอบฐานข้อมูล postgresql หรือไม่
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับผู้ดูแลฐานข้อมูล Exchange Exchange ปิดให้บริการใน4 ปีที่แล้ว ฉันวางแผนที่จะมีฐานข้อมูล postgresql ที่โหลดสูงมากในไม่ช้า ฉันมีประสบการณ์ในการจัดการฐานข้อมูล mysql ที่มีโหลดสูง แต่ตอนนี้เราต้องใช้ postgresql ฉันต้องการทราบว่าเครื่องมือใดที่ดีที่สุดสำหรับการจัดการฐานข้อมูลแบบวันต่อวันและการรายงานสถานะ (แน่นอนว่าคอนโซลเป็นตัวเลือกที่ดีที่สุด แต่ฉันต้องการทราบเกี่ยวกับตัวเลือกอื่น ๆ ด้วย) ยินดีต้อนรับหมดอายุทั้งหมด!

1
PostgreSQL ตรวจสอบสิทธิ์ของวัตถุในลำดับใด
รับบทบาทฐานข้อมูล, user1ฟังก์ชั่นที่something()กำหนดไว้เป็นขั้นตอนการจัดเก็บและมุมมองที่สร้างขึ้นเช่น: CREATE VIEW view1 AS select * from something() และได้รับการอนุญาตนี้: REVOKE ALL ON FUNCTION something FROM user1 REVOKE SELECT ON view1 FROM user1 เมื่อฉันเรียกฉันได้รับข้อผิดพลาดSELECT * FROM view1permission denied for function something() คำถามของฉันคือถ้าฉันเพิกถอนการอนุญาตที่เลือกไว้ในมุมมองเหตุใดจึงเรียกใช้ฟังก์ชันนี้ ฉันคาดหวังว่าจะได้รับสิ่งที่ชอบ: permission denied for relation view1 ขอขอบคุณ!

1
(x is not NULL) vs (ไม่ใช่ x is NULL) ใน PostgreSQL
ทำไมx IS NOT NULLไม่เท่ากับNOT x IS NULL? รหัสนี้: CREATE TABLE bug_test ( id int, name text ); INSERT INTO bug_test VALUES (1, NULL); DO $$ DECLARE v_bug_test bug_test; BEGIN RAISE NOTICE '%: %', v_bug_test, (v_bug_test IS NULL); RAISE NOTICE '%: %', v_bug_test, (v_bug_test IS NOT NULL); RAISE NOTICE '%: %', …
16 postgresql  null 

2
สร้างตารางเทียบกับเลือกเข้า
PostgreSQL รองรับCREATE TABLE ASและSELECT INTOเมื่อใดที่ฉันจะใช้ทั้งสอง CREATE TABLE AS - กำหนดตารางใหม่จากผลลัพธ์ของแบบสอบถาม CREATE TABLE ASสร้างตารางและเติมด้วยข้อมูลที่คำนวณโดยSELECTคำสั่ง คอลัมน์ตารางมีชื่อและประเภทข้อมูลที่เชื่อมโยงกับคอลัมน์ผลลัพธ์ของSELECT(ยกเว้นว่าคุณสามารถแทนที่ชื่อคอลัมน์ได้โดยให้รายชื่อคอลัมน์ใหม่ที่ชัดเจน) CREATE TABLE ASมีความคล้ายคลึงกับการสร้างมุมมอง แต่มันค่อนข้างแตกต่างกันมาก: มันสร้างตารางใหม่และประเมินแบบสอบถามเพียงครั้งเดียวเพื่อเติมตารางใหม่ในตอนแรก ตารางใหม่จะไม่ติดตามการเปลี่ยนแปลงที่ตามมาของตารางต้นฉบับของแบบสอบถาม ในทางตรงกันข้ามมุมมองประเมินSELECTคำสั่งที่กำหนดอีกครั้งเมื่อใดก็ตามที่มันถูกสอบถาม และจากนั้น SELECT INTO - กำหนดตารางใหม่จากผลลัพธ์ของแบบสอบถาม SELECT INTOสร้างตารางใหม่และเติมด้วยข้อมูลที่คำนวณโดยแบบสอบถาม SELECTข้อมูลจะไม่ได้กลับไปยังลูกค้าตามที่มีปกติ SELECTคอลัมน์ตารางใหม่มีชื่อและข้อมูลที่เกี่ยวข้องกับประเภทคอลัมน์การส่งออกของ
16 postgresql  ctas 

2
ข้อควรพิจารณาเกี่ยวกับคีย์หลักที่ไม่ใช่จำนวนเต็ม
บริบท ฉันออกแบบฐานข้อมูล (บน PostgreSQL 9.6) ซึ่งจะเก็บข้อมูลจากแอปพลิเคชันแบบกระจาย เนื่องจากลักษณะการกระจายของแอปพลิเคชันฉันไม่สามารถใช้จำนวนเต็มเพิ่มโดยอัตโนมัติ ( SERIAL) เป็นคีย์หลักของฉันเนื่องจากสภาพการแข่งขันที่เป็นไปได้ วิธีแก้ปัญหาตามธรรมชาติคือการใช้ UUID หรือตัวระบุที่ไม่ซ้ำกันทั่วโลก Postgres มาพร้อมกับประเภทในตัวUUIDซึ่งเป็นขนาดที่พอดี ปัญหาที่ฉันมีกับ UUID เกี่ยวข้องกับการดีบัก: มันเป็นสตริงที่ไม่เป็นมิตรกับมนุษย์ ตัวระบุไม่ff53e96d-5fd7-4450-bc99-111b91875ec5บอกอะไรฉันในขณะACC-f8kJd9xKCdที่ไม่รับประกันว่าจะไม่ซ้ำใคร แต่บอกว่าฉันกำลังจัดการกับACCวัตถุ จากมุมมองการเขียนโปรแกรมเป็นเรื่องปกติที่จะดีบักเคียวรีแอปพลิเคชันที่เกี่ยวข้องกับวัตถุต่าง ๆ สมมติว่าโปรแกรมเมอร์ค้นหาACCวัตถุ (บัญชี) ที่ORDตาราง (ลำดับ) อย่างไม่ถูกต้อง ด้วยตัวระบุที่มนุษย์สามารถอ่านได้โปรแกรมเมอร์จะระบุปัญหาได้ทันทีในขณะที่ใช้ UUID เขาจะใช้เวลาในการพิจารณาว่ามีอะไรผิดปกติ ฉันไม่ต้องการเอกลักษณ์ "รับประกัน" ของ UUIDs; ฉันไม่ต้องการห้องพักบางส่วนสำหรับการสร้างปุ่มโดยไม่ให้เกิดความขัดแย้ง แต่ UUID เป็น overkill นอกจากนี้สถานการณ์กรณีที่เลวร้ายที่สุดมันจะไม่ใช่จุดจบของโลกหากเกิดการชน (ฐานข้อมูลปฏิเสธและแอปพลิเคชันสามารถกู้คืนได้) ดังนั้นการพิจารณาถึงความไม่เหมาะสมตัวระบุขนาดเล็ก แต่เป็นมิตรกับมนุษย์จะเป็นทางออกที่ดีสำหรับกรณีการใช้งานของฉัน การระบุวัตถุแอปพลิเคชัน ตัวระบุที่ฉันใช้มีรูปแบบต่อไปนี้: {domain}-{string}ซึ่ง{domain}จะถูกแทนที่ด้วยโดเมนวัตถุ (บัญชีคำสั่งผลิตภัณฑ์) และ{string}เป็นสตริงที่สร้างแบบสุ่ม ในบางกรณีอาจทำให้การแทรก …

1
เหตุใดเขตเวลาจึงมีออฟเซ็ตออฟจาก UTC ในปี 0001 ใน Postgres อย่างบ้าคลั่ง
ใน Postgres 9.5 ฉันรู้สึกประหลาดใจเมื่อเห็นผลลัพธ์ที่เห็นด้านล่างขณะทำการทดสอบกับปี0001(ไม่มีศูนย์ปี0000) ออฟเซ็ตของ-07:52:58? ตัวอย่างรหัสบางส่วน โปรดทราบว่าฉันใช้ผสมกับTIMESTAMP WITH TIME ZONEและTIMESTAMP WITHOUT TIME ZONEดังนั้นอ่านอย่างระมัดระวัง SET TIME ZONE 'America/Los_Angeles' ; SELECT (TIMESTAMP WITH TIME ZONE '2015-01-01 00:00:00.0', TIMESTAMP WITH TIME ZONE '0001-01-01 00:00:00.0Z', TIMESTAMP WITHOUT TIME ZONE '0001-01-01 00:00:00.0Z') ; ("2015-01-01 00:00:00-08","0001-12-31 16:07:02-07:52:58 BC","0001-01-01 00:00:00") 0001-12-31 16:07:02-07:52:58 BCฉันกำลังประหลาดใจโดยค่าที่สองว่า ผมเข้าใจว่าเราต้องย้อนกลับไปแปดชั่วโมงเป็นAmerica/Los_Angelesเป็นแปดชั่วโมงที่อยู่เบื้องหลัง UTC กับ offset …

2
การค้นหา Trigram ช้าลงมากเมื่อสตริงการค้นหายาวขึ้น
ในฐานข้อมูล Postgres 9.1 ฉันมีตารางที่table1มีแถว ~ 1.5M และคอลัมน์label(ชื่อที่เรียบง่ายเพื่อประโยชน์ของคำถามนี้) มีดัชนีการทำงานของ Trigram-on lower(unaccent(label)) ( unaccent()ถูกทำให้ไม่เปลี่ยนรูปเพื่ออนุญาตให้ใช้ในดัชนี) แบบสอบถามต่อไปนี้ค่อนข้างเร็ว: SELECT count(*) FROM table1 WHERE (lower(unaccent(label)) like lower(unaccent('%someword%'))); count ------- 1 (1 row) Time: 394,295 ms แต่แบบสอบถามต่อไปนี้ช้าลง: SELECT count(*) FROM table1 WHERE (lower(unaccent(label)) like lower(unaccent('%someword and some more%'))); count ------- 1 (1 row) Time: 1405,749 ms และการเพิ่มคำอื่น …

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