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

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

2
ดูการใช้งานหน่วยความจำ Postgresql
ฉันใช้งาน Postgresql บนเซิร์ฟเวอร์ Ubuntu และต้องสามารถตรวจสอบการใช้งานหน่วยความจำได้ ขณะนี้ฉันมีสคริปต์ที่ทำงานในงาน cron หนึ่งนาทีที่ตรวจสอบ / บันทึกสถิติต่างๆและจำเป็นต้องตรวจสอบ / บันทึกการใช้งานหน่วยความจำปัจจุบันของ Postgresql ฉันค้นหาไปแล้วและไม่สามารถหาอะไรได้มากไปกว่าความจริงที่ว่า Postgresql ใช้หน่วยความจำที่ใช้ร่วมกันได้ดีดังนั้นค่าที่กำหนดโดยโปรแกรมเช่น 'top' นั้นไม่ถูกต้อง ฉันจะตรวจสอบการใช้งานหน่วยความจำทั้งหมดของ Postgresql ได้ตลอดเวลาที่กำหนดไว้อย่างไร ข้อมูลนี้จะถูกนำมาใช้ในการสร้างกราฟสำหรับการวิเคราะห์ในภายหลัง

2
PostgreSQL: ไม่เปลี่ยนรูปเปลี่ยนแปลงได้เสถียร
ฉันไม่ชัดเจนเกี่ยวกับความหมายที่แท้จริงในคำจำกัดความของฟังก์ชัน IMMUTABLE, VOLATILE และ STABLE ฉันอ่านเอกสารโดยเฉพาะคำจำกัดความของแต่ละคำ เปลี่ยนรูปแสดงให้เห็นว่าฟังก์ชั่นไม่สามารถแก้ไขฐานข้อมูลและ เสมอกลับผลเดียวกันเมื่อได้รับค่าอาร์กิวเมนต์เดียวกัน ; นั่นคือมันไม่ทำการค้นหาฐานข้อมูลหรือใช้ข้อมูลที่ไม่ได้อยู่ในรายการอาร์กิวเมนต์โดยตรง หากมีการกำหนดตัวเลือกนี้การเรียกฟังก์ชันใด ๆ ที่มีอาร์กิวเมนต์คงที่ทั้งหมดสามารถแทนที่ด้วยค่าฟังก์ชันได้ทันที STABLE บ่งชี้ว่าฟังก์ชั่นไม่สามารถแก้ไขฐานข้อมูลและภายในการสแกนตารางเดียวมันจะส่งคืนผลลัพธ์เดียวกันสำหรับค่าอาร์กิวเมนต์เดียวกันแต่ผลลัพธ์นั้นสามารถเปลี่ยนแปลงได้ตลอดทั้งคำสั่ง SQL นี่คือการเลือกที่เหมาะสมสำหรับฟังก์ชั่นที่ผลลัพธ์ขึ้นอยู่กับการค้นหาฐานข้อมูลตัวแปรพารามิเตอร์ (เช่นเขตเวลาปัจจุบัน) ฯลฯ (ไม่เหมาะสมสำหรับทริกเกอร์ AFTER ที่ต้องการแถวการสืบค้นที่แก้ไขโดยคำสั่งปัจจุบัน) โปรดทราบว่า ฟังก์ชันตระกูล current_timestamp มีคุณสมบัติว่าเสถียรเนื่องจากค่าของมันไม่เปลี่ยนแปลงภายในธุรกรรม VOLATILE บ่งชี้ว่าค่าฟังก์ชั่นสามารถเปลี่ยนแปลงได้แม้ในการสแกนตารางเดียวดังนั้นจึงไม่มีการปรับให้เหมาะสม ฟังก์ชันฐานข้อมูลค่อนข้างน้อยมีความผันผวนในแง่นี้ ตัวอย่างบางส่วนเป็นแบบสุ่ม (), currval (), timeofday () แต่โปรดทราบว่าฟังก์ชั่นใด ๆ ที่มีผลข้างเคียงจะต้องจำแนกความผันผวนแม้ว่าผลที่ได้นั้นจะสามารถคาดเดาได้อย่างชัดเจนเพื่อป้องกันการโทรออก ตัวอย่างคือ setval () ความสับสนของฉันมาพร้อมกับเงื่อนไขสำหรับ IMMUTABLE และเสถียรที่ฟังก์ชันALWAYSหรือCONSISTENTLYส่งคืนผลลัพธ์เดียวกันโดยให้อาร์กิวเมนต์เดียวกัน นิยาม IMMUTABLE ระบุว่าฟังก์ชันไม่ได้ทำการค้นหาฐานข้อมูลหรือใช้ข้อมูลที่ไม่ได้นำเสนอโดยตรงในรายการอาร์กิวเมนต์ ดังนั้นสำหรับฉันนั่นหมายถึงฟังก์ชั่นดังกล่าวถูกใช้เพื่อจัดการข้อมูลที่ได้รับจากลูกค้าและไม่ควรมีคำสั่ง SELECT ... …

1
PostgreSQL: ข้อผิดพลาด SSL SYSCALL: ตรวจพบ EOF
ก่อนอื่นฉันค้นหาและพบหลายกระทู้ที่เกี่ยวข้องกับข้อผิดพลาดนี้และส่วนใหญ่ชี้ไปที่ปัญหา RAM หรือปัญหา SSL ฉันพยายามเอาชนะความเป็นไปได้ SSL โดยการเพิ่ม sslmode = ปิดใช้งานในบรรทัดคำสั่ง: psql -U waypoint -d waypoint -W -c "alter table telemetria_data.historico alter clase type smallint, alter valor type real[], alter power type smallint, alter voltaje type real;" -h localhost -v sslmode=disable แต่ข้อความเดียวกันปรากฏ: SSL SYSCALL error: EOF detected connection to server was …

1
การสร้างข้อ จำกัด ที่ไม่ซ้ำกันในคอลัมน์ Postgres ลบความจำเป็นในการจัดทำดัชนีหรือไม่
การสร้างข้อ จำกัด ที่ไม่ซ้ำกันในคอลัมน์ Postgres ลบความจำเป็นในการจัดทำดัชนีหรือไม่ ฉันคาดหวังว่าดัชนีจำเป็นสำหรับการรักษาข้อ จำกัด ได้อย่างมีประสิทธิภาพโดยอัตโนมัติ

1
ทำไม PL / Python ไม่น่าเชื่อถือ
ตามเอกสาร: PL / Python มีเฉพาะภาษาที่ "ไม่น่าเชื่อถือ" ซึ่งหมายความว่ามันไม่ได้มีวิธี จำกัด การใช้งานสิ่งที่ผู้ใช้สามารถทำได้และจึงตั้งชื่อว่า plpythonu ตัวแปรที่เชื่อถือได้ plpython อาจมีให้ใช้ในอนาคตหากกลไกการดำเนินการที่ปลอดภัยได้รับการพัฒนาใน Python ทำไมมันยากที่จะพัฒนากลไกการดำเนินการที่ปลอดภัยสำหรับ Python แต่ไม่ใช่สำหรับภาษาอื่นเช่น Perl?

2
ตัวเลข vs Integer สำหรับคอลัมน์ขนาดและประสิทธิภาพ
ฉันมีแอปพลิเคชั่นซึ่งใช้ตาราง PostgreSQL ตารางมีขนาดใหญ่มาก (พันล้านแถว) และมีคอลัมน์ซึ่งเป็นจำนวนเต็ม integerสามารถเป็นได้ถึง 6 หลักเช่น 0-999,999 ไม่มีเชิงลบ numeric(6,0)ฉันคิดเกี่ยวกับการเปลี่ยนให้เป็น นี่เป็นความคิดที่ดีไหม จะnumeric(6,0)น้อยกว่าไบต์? วิธีการเกี่ยวกับประสิทธิภาพ (ตารางนี้มีการสอบถามมาก)
11 postgresql 

3
วิธีที่เร็วที่สุดในการดึงข้อมูลแถวสุดท้ายจากตารางคืออะไร
ฉันมีตาราง PostgreSQL Pricesโดยมีคอลัมน์: price (ทศนิยม) product_id (Int) นอกจากนี้ยังมีcreated_atและupdated_atคอลัมน์ ราคาอัพเดทเป็นประจำและฉันเก็บราคาเก่าไว้ในตาราง สำหรับผลิตภัณฑ์ที่กำหนดราคาสุดท้ายในตารางคือราคาปัจจุบัน วิธีที่มีประสิทธิภาพที่สุดในการรับราคาสุดท้ายสำหรับผลิตภัณฑ์เฉพาะคืออะไร: ดัชนีproduct_idและแบบสอบถามสำหรับระเบียนสุดท้าย เพิ่มคอลัมน์ที่สามactive(บูลีน) เพื่อทำเครื่องหมายราคาล่าสุดและสร้างดัชนีคอมโพสิต ( product_idและactive) หรืออย่างอื่น?

3
ตั้งค่าสุ่มจากชุด
ฉันต้องใส่ค่าสุ่มลงในฐานข้อมูล แต่ฉันไม่ต้องการที่จะจบลงด้วยข้อความที่สุ่มสมบูรณ์ (เช่น 7hfg43d3) แต่ฉันต้องการสุ่มเลือกค่าหนึ่งค่าที่จัดทำโดยตัวเอง

1
เข้าสู่ระบบไฟล์ในบริการ windows PostgreSQL
ฉันต้องการทางเลือกอื่นสำหรับการรันคำสั่งต่อไปนี้: C:\xxx\pgsql\bin\pg_ctl" -D "C:\xxx\pgsql\data" -l "C:\yyy\log\pgsql.log" start. วิธีนี้เซิร์ฟเวอร์เริ่มต้นและเข้าสู่C:\yyy\log\pgsql.logระบบ เมื่อฉันพยายามที่จะลงทะเบียนเซิร์ฟเวอร์เป็นบริการ - ไม่มีตัวเลือกการบันทึกและเซิร์ฟเวอร์บันทึกไปยังตัวแสดงเหตุการณ์ จากเอกสาร pg_ctl: pg_ctl register [-N servicename] [-U ชื่อผู้ใช้] [-P รหัสผ่าน] [-D datadir] [-S a [uto] | d [emand]] [-w] [-t วินาที] [-s] [-o ตัวเลือก] ฉันจะบังคับให้เซิร์ฟเวอร์ลงชื่อเข้าใช้ไฟล์ได้อย่างไร หมายเหตุ: ฉันไม่ต้องการใช้โปรแกรมติดตั้งแบบคลิกเดียวฉันแค่ต้องการทำงานกับไบนารีที่ไม่ได้ซิป


1
เพิ่มประสิทธิภาพการค้นหา 'ล่าสุด' ใน Postgres บนแถว 20M
ตารางของฉันมีลักษณะดังนี้: Column | Type | -----------------------+-------------------+ id | integer | source_id | integer | timestamp | integer | observation_timestamp | integer | value | double precision | มีดัชนีอยู่ใน source_id, การประทับเวลาและในคอมโบของการประทับเวลาและรหัส ( CREATE INDEX timeseries_id_timestamp_combo_idx ON timeseries (id, timeseries DESC NULLS LAST)) มีแถวอยู่ 20M (ตกลงมี 120M แต่ 20M กับ source_id = …

3
อะไรคือผลของการไม่ระบุ NOT NULL ใน PostgreSQL สำหรับฟิลด์ที่ไม่สามารถเป็นโมฆะได้?
ฉันมีแอปพลิเคชัน (ข้อมูลถูกเก็บไว้ใน PostgreSQL) ซึ่งส่วนใหญ่ของเขตข้อมูลในตารางจะไม่ว่างเสมอ แต่สคีมาสำหรับตารางเหล่านี้ไม่ได้บังคับใช้สิ่งนี้ ตัวอย่างเช่นดูที่ตารางปลอมนี้: CREATE TABLE "tbl" ( "id" serial, "name" varchar(40), "num" int, "time" timestamp PRIMARY KEY ("id"), UNIQUE ("id") ); นอกจากนี้ยังname, num, timeไม่ได้ระบุไว้อย่างชัดเจนว่าNOT NULLในความเป็นจริงพวกเขาเป็นเพราะการบังคับใช้ที่เกิดขึ้นในด้านการประยุกต์ใช้ ความรู้สึกของฉันคือมันควรจะเปลี่ยน แต่ความแตกต่างคือระดับแอปพลิเคชันทำให้แน่ใจว่าค่า Null ไม่สามารถปรากฏที่นี่และไม่มีใครปรับเปลี่ยนตารางด้วยตนเอง คำถามของฉันคืออะไรประโยชน์ (ประสิทธิภาพการจัดเก็บความสอดคล้องอย่างอื่น) และข้อเสีย (สมมติว่าฉันได้ตรวจสอบแล้วว่าไม่มีโมฆะในปัจจุบันและจากตรรกะทางธุรกิจควรไม่มีโมฆะ) โดยการตั้งค่าNOT NULLข้อ จำกัด ที่ชัดเจน? เรามีขั้นตอนการตรวจสอบโค้ดที่ดีและมีเอกสารที่ดีพอสมควรดังนั้นความเป็นไปได้ที่คนใหม่บางคนจะส่งมอบสิ่งที่ทำลายข้อ จำกัด นี้ไม่เพียงพอที่จะพิสูจน์การเปลี่ยนแปลง นี่ไม่ใช่การตัดสินใจของฉันดังนั้นนี่คือเหตุผลที่ฉันกำลังมองหาเหตุผลอื่น ๆ ในความคิดของฉันถ้าสิ่งที่ไม่สามารถเป็นโมฆะและฐานข้อมูลช่วยให้คุณระบุว่าสิ่งที่ไม่เป็นโมฆะ - เพียงแค่ทำมัน โดยเฉพาะอย่างยิ่งถ้าการเปลี่ยนแปลงนั้นง่ายมาก

1
ผลรวมช่วงเวลาของวันที่ภายในคอลัมน์เดียวกัน
คุณจะหาผลรวมของความแตกต่างของช่วงวันที่ในคอลัมน์เดียวกันระหว่างแถวแทรกได้อย่างไร ฉันมีคอลัมน์ Datetime และต้องการคำนวณความแตกต่างระหว่างแถว ฉันต้องการความแตกต่างในวินาที คำถามนี้ไม่ได้เกี่ยวกับวิธีสร้างความแตกต่างระหว่างการประทับเวลา 2 ครั้ง แต่จะเน้นไปที่วิธีการคำนวณที่มีประสิทธิภาพมากที่สุดระหว่างแถวในตารางเดียวกัน ในกรณีของฉันแต่ละแถวมีประเภทกิจกรรมวันที่ที่เชื่อมโยงกัน 2 แถวด้วยกันอย่างมีเหตุผล รายละเอียดที่เกี่ยวข้องกับวิธีการจัดกลุ่มประเภทเหตุการณ์ของการเริ่มต้นและสิ้นสุด (คำถามของ Andriy M) การเริ่มต้นและสิ้นสุด "ควร" ติดต่อกัน หากการเริ่มต้นไม่มีจุดสิ้นสุดที่ตามมาควรจะถูกปล่อยออกจากผลรวม การย้ายไปยังจุดเริ่มต้นถัดไปเพื่อดูว่ามีจุดจบหรือไม่ ควรเพิ่มจุดเริ่มต้น - คู่ที่ต่อเนื่องกันเท่านั้นในผลรวมของวินาทีทั้งหมด ทำงานใน postgresql 9.x ... ตัวอย่างข้อมูลในตาราง eventtype, eventdate START, 2015-01-01 14:00 END, 2015-01-01 14:25 START, 2015-01-01 14:30 END, 2015-01-01 14:43 START, 2015-01-01 14:45 END, 2015-01-01 14:49 START, …

2
การมองเห็นแถวถูกกำหนดอย่างไร?
ในกรณีที่ง่ายที่สุดเมื่อเราแทรกแถวใหม่ลงในตาราง (และการทำธุรกรรม) มันจะปรากฏให้เห็นในการทำธุรกรรมที่ตามมาทั้งหมด ดูxmaxเป็น 0 ในตัวอย่างนี้: CREATE TABLE vis ( id serial, is_active boolean ); INSERT INTO vis (is_active) VALUES (FALSE); SELECT ctid, xmin, xmax, * FROM vis; ctid │xmin │ xmax │ id │ is_active ───────┼─────┼──────┼────┼─────────── (0,1) │2699 │ 0 │ 1 │ f เมื่อเราอัปเดต (เนื่องจากการตั้งค่าสถานะถูกกำหนดFALSEโดยไม่ได้ตั้งใจ) จะมีการเปลี่ยนแปลงเล็กน้อย: UPDATE vis …

3
วิธีหลีกเลี่ยงการขึ้นต่อกันแบบวนซ้ำ (การอ้างอิงแบบวงกลม) ระหว่าง 3 ตาราง?
ฉันมี 3 ตาราง: คน เสา ชอบ เมื่อฉันออกแบบโมเดล ER มันมีการพึ่งพาแบบวนรอบ: 1: N คน -------- <โพสต์ 1: N โพสต์ ---------- <ไลค์ 1: N คน -------- <ไลค์ ตรรกะคือ: 1 คนสามารถมีโพสต์ได้มากมาย 1 โพสต์มีไลค์มากมาย 1 คนสามารถชอบโพสต์จำนวนมาก (คนที่สร้างไม่สามารถถูกใจโพสต์ของเขาเอง) ฉันจะลบการออกแบบแบบวงกลมนี้ได้อย่างไร หรือการออกแบบฐานข้อมูลของฉันผิด

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