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

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

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

3
ฉันจะทราบได้อย่างไรว่าตารางมีอยู่ใน search_path ปัจจุบันด้วย PLPGSQL หรือไม่
ฉันกำลังเขียนสคริปต์การตั้งค่าสำหรับแอปพลิเคชันที่เป็น addon สำหรับแอปพลิเคชันอื่นดังนั้นฉันต้องการตรวจสอบว่ามีตารางสำหรับแอปพลิเคชันอื่นอยู่หรือไม่ ถ้าไม่ฉันต้องการให้ข้อผิดพลาดที่เป็นประโยชน์แก่ผู้ใช้ อย่างไรก็ตามฉันไม่ทราบว่าสคีมาใดที่จะถือตาราง DO LANGUAGE plpgsql $$ BEGIN PERFORM 1 FROM pg_catalog.pg_class c JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace WHERE n.nspname = current_setting('search_path') AND c.relname = 'foo' AND c.relkind = 'r'; -- not sure if I actually need this or not... IF NOT FOUND THEN RAISE 'This …

1
PostgreSQL: วางคอลัมน์จากมุมมอง
ฉันมีVIEWที่ที่ฉันพยายามสร้างสคริปต์วิวัฒนาการเพื่อให้ฉันสามารถเพิ่มคอลัมน์ลงไปได้ ส่วนนั้นใช้ได้ดี; เพิ่มคอลัมน์แล้วก็ได้ อย่างไรก็ตามการย้อนกลับไม่ทำงาน ลบคอลัมน์ที่เพิ่มล่าสุดล้มเหลวด้วยERROR: cannot drop columns from viewข้อความ ปัญหาคือว่ามุมมองนี้มีการอ้างอิงจำนวนมากทั้งจากและไปดังนั้นฉันไม่สามารถเพียงแค่DROP CASCADEสิ่งที่ยี้! มีเหตุผลทำไมฉันไม่สามารถลบคอลัมน์ที่เพิ่มใหม่จากที่กำหนดVIEW? จากนั้นฉันจะทำอย่างไรเพื่อให้ภารกิจนี้สำเร็จ (หมายเหตุ: สถานการณ์นี่คือสิ่งที่พวกเขาเป็น แต่ฉันเป็นอย่างดีสามารถดูสถานการณ์ที่คล้ายกันหรือที่รู้จักลดลงคอลัมน์จากมุมมองในกรณีอื่น ๆ อีกมากมาย)

3
ใช้คิวรีช้ากับพันล้านแถวตาราง // ดัชนี
เนื่องจากฉันเป็นนักพัฒนาอายุน้อยและไม่ชำนาญในการใช้ฐานข้อมูล (PostgreSQL 9.3) ฉันพบปัญหาบางอย่างเกี่ยวกับโครงการที่ฉันต้องการความช่วยเหลือ โครงการของฉันเกี่ยวกับการรวบรวมข้อมูลจากอุปกรณ์ (มากถึง 1,000 อุปกรณ์ขึ้นไป) ซึ่งทุกอุปกรณ์กำลังส่งข้อมูลหนึ่งบล็อกทุกวินาทีซึ่งจะสร้างประมาณ 3 ล้านแถวต่อชั่วโมง ขณะนี้ฉันมีตารางขนาดใหญ่หนึ่งตารางที่ฉันเก็บข้อมูลขาเข้าของทุกอุปกรณ์: CREATE TABLE data_block( id bigserial timestamp timestamp mac bigint ) เนื่องจากมีข้อมูลหลายประเภทที่บล็อกข้อมูลสามารถ (หรือไม่สามารถ) รวมจึงมีตารางอื่น ๆ ที่อ้างอิงdata_blockตาราง CREATE TABLE dataA( data_block_id bigserial data CONSTRAINT fkey FOREIGN KEY (data_block_id) REFERENCES data_block(id); ); CREATE TABLE dataB(...); CREATE TABLE dataC(...); CREATE INDEX index_dataA_block_id …

2
ธุรกรรมใน PostgreSQL ผ่านทาง `psycopg2` ต่อเคอร์เซอร์หรือต่อการเชื่อมต่อหรือไม่?
ฉันทำงานกับ PostgreSQL 9.3 โดยใช้psycopg2API ฐานข้อมูล ฉันได้ตั้งค่า API API ในระดับการแยกขั้นต่ำ (โหมด "autocommit") และกำลังจัดการธุรกรรมของฉันเองโดยตรงผ่าน SQL ตัวอย่าง: cur = self.conn.cursor() cur.execute("BEGIN;") cur.execute("SELECT dbId, downloadPath, fileName, tags FROM {tableName} WHERE dlState=%s".format(tableName=self.tableName), (2, )) ret = cur.fetchall() cur.execute("COMMIT;") โดยพื้นฐานแล้วธุรกรรมที่เริ่มต้นด้วยการcur.execute("BEGIN;")จำกัด เพียงเคอร์เซอร์นั้นหรือสำหรับการเชื่อมต่อทั้งหมด ( self.conn.cursor())? สิ่งที่ซับซ้อนยิ่งกว่าที่ฉันกำลังทำอยู่นั้นเกี่ยวข้องกับการดำเนินการฐานข้อมูลแยกกันหลายครั้ง เนื่องจากทั้งหมดนี้อยู่ในคลาสที่มีการเชื่อมต่อเป็นสมาชิกจึงสะดวกยิ่งขึ้นในการสร้างเคอร์เซอร์ภายในแต่ละฟังก์ชั่น อย่างไรก็ตามฉันไม่แน่ใจว่าการสร้างเคอร์เซอร์ภายในธุรกรรมได้อย่างไร โดยพื้นฐานแล้วถ้าธุรกรรมต่อการเชื่อมต่อฉันสามารถสร้างเคอร์เซอร์จำนวนมากได้ทันทีภายในธุรกรรม หากพวกเขาต่อเคอร์เซอร์นั่นหมายความว่าฉันต้องผ่านเคอร์เซอร์ไปทุกที่ มันคืออะไร เอกสารไม่ได้สัมผัสกับสิ่งนี้แม้ว่าความจริงที่ว่าคุณสามารถโทรได้connection.commit()ทำให้ฉันมั่นใจอย่างเป็นธรรมว่าการควบคุมการทำธุรกรรมนั้นเป็นการเชื่อมต่อ
10 postgresql 

2
PostgreSQL เพิ่มประสิทธิภาพการเพิ่มคอลัมน์ด้วยค่าเริ่มต้นที่ไม่ใช่ค่า NULL หรือไม่
เมื่อเพิ่มNOT NULLคอลัมน์ที่มีDEFAULTค่า - PostgreSQL ปรับการดำเนินการนี้ให้เหมาะสมหรือไม่ ในกรณีที่ตารางมี n แถว, คอลัมน์เปลี่ยนแปลงที่ไม่ได้รับการปรับให้เหมาะสมจะทำให้การเขียน n ของค่าเริ่มต้น - ซึ่งอาจเป็นเรื่องที่เจ็บปวดอย่างมาก ด้วยการปรับให้เหมาะสมฐานข้อมูลจะสร้างคอลัมน์ใหม่ทันทีเก็บเพียงหนึ่งสำเนาของค่าเริ่มต้นซึ่งจะถูกส่งกลับเมื่อไม่พบค่าที่ไม่ใช่ค่าเริ่มต้นสำหรับคอลัมน์นั้นในโครงสร้างข้อมูลดัชนีที่เหมาะสม ตัวอย่างเช่นOracle 11g มีการเพิ่มประสิทธิภาพเช่นนั้น

2
ลำดับของคอลัมน์ในดัชนีรวมใน PostgreSQL (และลำดับการสืบค้น)
ฉันมีตารางที่มี 50K แถว จริงๆแล้วมันเป็นตาราง PostGIS แบบสอบถามมี 4 ส่วน (บังคับ 1 ข้อ) (3 ตัวเลือก) กล่องแยก (สี่เหลี่ยมทางภูมิศาสตร์) ที่มีละติจูด 4 เส้น, ยาว (ฉันใช้ st_intersects) [จำเป็น] ช่วงวันที่ (นาทีสูงสุด) ในฟิลด์วันที่ ประเภทไฟล์ (ชุดของค่าข้อความสูงสุด 8 ค่า) กำลังใช้ IN (..... ) แต่ฉันสามารถสร้างตารางชั่วคราวได้ถ้าต้องการ ฉันเห็นคนจำนวนมากไม่ชอบอิน ประเทศ (ค่าข้อความ) ฉันคาดหวังประมาณ 100 - 4,000 แถวที่ส่งคืน ถ้าฉันสร้างดัชนีผสมบนตารางฉันควรใช้คอลัมน์ใดก่อน เม็ดเล็กละเอียดน่าจะเป็นที่ตั้ง (มีการกระจายข้อมูลไปทั่วโลก) ปัจจุบันฉันมีมันเป็นดัชนีส่วนสำคัญ ดัชนีอื่น ๆ จะเป็น BTREE …

1
การบังคับใช้ข้อ จำกัด “ ออกไปสองตาราง”
ฉันพบปัญหาในการสร้างแบบจำลองวงจรไฟฟ้าใน SQL โครงสร้างที่ฉันต้องการจะจับคือ part ←────────── pin ↑ ↑ part_inst ←───── pin_inst โดยที่ "inst" สั้นสำหรับ "อินสแตนซ์" ยกตัวอย่างเช่นผมอาจจะมีเป็นpartLM358 op-amp กับpins 1OUT, 1IN-, 1in + GND, 2in + 2IN-, 2OUT และ V CC จากนั้นฉันอาจวางส่วนนี้ลงบนแผนผังสร้างpart_instและ 8 pin_instวินาที ละเว้นเขตข้อมูลความพยายามครั้งแรกของฉันที่ schema คือ create table parts ( part_id bigserial primary key ); create table pins ( pin_id …

3
การเปลี่ยนพอร์ต PostgreSQL โดยใช้บรรทัดคำสั่ง
พอร์ตเริ่มต้น PostgreSQL ของฉันคือ 5432 ฉันต้องการเปลี่ยนพอร์ตเริ่มต้นโดยใช้บรรทัดคำสั่ง (ใน Windows 7) ฉันเห็นโซลูชันนี้มาก่อน: /programming/187438/want-to-change-pgsql-port ฉันพยายามเรียกใช้คำสั่งต่อไปนี้ แต่มันล้มเหลว: postgres --p 5431 มีคนบอกวิธีเปลี่ยนพอร์ตโดยใช้บรรทัดคำสั่งได้ไหม

1
pg_dump และข้อผิดพลาด: ไม่มี chunk number 0 สำหรับค่าขนมปัง
ฉันใช้ PostgreSQL 8.4.15 ขณะทำงานpg_dumpเพื่อสำรองฐานข้อมูลฉันได้รับข้อผิดพลาดดังต่อไปนี้: pg_dump: SQL command failed pg_dump: Error message from server: ERROR: missing chunk number 0 for toast value 123456789 in pg_toast_987654321 pg_dump: The command was: COPY public.my_table (id, .... all the columns ...) เมื่อค้นหาข้อความแสดงข้อผิดพลาดนี้ฉันพบการอ้างอิงสองสามรายการ ( ที่นี่และที่นี่ ) ที่แนะนำให้สร้างดัชนีตารางอีกครั้ง (ในการสนทนาเหล่านี้มีการอ้างอิงถึงการสืบค้นpg_classตารางเพื่อค้นหาpg_toast_XXXXXXค่าที่ถูกต้องแต่ดูเหมือนว่าเป็นเพราะมันไม่ได้แสดงในข้อความแสดงข้อผิดพลาดของพวกเขาฉันข้ามส่วนนี้เพราะฉันมีค่าที่แสดงในข้อความแสดงข้อผิดพลาด ฉันเดาว่ามันอาจจะสะดวกกว่าเนื่องจาก PostgreSQL รุ่นที่ใหม่กว่า) ฉันวิ่งต่อไปนี้: REINDEX table pg_toast.pg_toast_987654321; VACUUM …
10 postgresql 

4
ฉันจะส่งออกชุดย่อยของ tabledata จากฐานข้อมูล prodution ไปยังฐานข้อมูลการทดสอบในพื้นที่ได้อย่างไร
เรามีฐานข้อมูลการผลิต postgres ที่ค่อนข้างใหญ่: ~ 20GB ฐานข้อมูล PostgreSQL โฮสต์บน heroku ฉันต้องการคัดลอกชุดย่อยขนาดเล็กของข้อมูลตารางไปยังฐานข้อมูลท้องถิ่นของฉันเพื่อให้ฉันสามารถเรียกใช้การทดสอบบางอย่างกับพวกเขาโดยไม่ต้องทำงานเกี่ยวกับการผลิต ฉันไม่ต้องการสร้างข้อมูลตัวอย่างด้วยตนเอง แต่ควรใช้ข้อมูลที่มีอยู่แล้วในสภาพแวดล้อมการผลิต ประมาณ 100 แถวจากแต่ละตารางในฐานข้อมูลจะเพียงพอ มีวิธีง่ายๆในการทำสิ่งนี้หรือไม่?

1
การเริ่มต้นเซิร์ฟเวอร์ PostgreSQL หลังจาก HDD ขัดข้องจะส่งผลให้เกิดสถานะล้มเหลว
ฉันใช้กับFedora 15 PostgreSQL 9.1.4Fedora ล้มเหลวเมื่อเร็ว ๆ นี้หลังจากนั้น: ความพยายามเริ่มต้นเซิร์ฟเวอร์ PostgreSQL: service postgresql-9.1 start จะช่วยให้ Starting postgresql-9.1 (via systemctl): Job failed. See system logs and 'systemctl status' for details. [FAILED] แม้ว่าเซิร์ฟเวอร์เริ่มทำงานตามปกติเมื่อฉันเริ่มต้นเซิร์ฟเวอร์เป็นครั้งแรกหลังจากรีบูตระบบ แต่ความพยายามในการใช้psqlทำให้เกิดข้อผิดพลาดนี้: psql: could not connect to server: No such file or directory Is the server running locally and accepting connections on …
10 linux  postgresql 

1
วิธีที่มีประสิทธิภาพที่สุดในการเพิ่มคอลัมน์อนุกรมลงในตารางขนาดใหญ่
อะไรที่เร็วที่สุดวิธีการเพิ่มคอลัมน์ BIGSERIAL ไปยังตารางขนาดใหญ่ (~ 3 Bil. แถว ~ 174Gb)? แก้ไข: ฉันต้องการให้คอลัมน์เป็นค่าที่เพิ่มขึ้นสำหรับแถวที่มีอยู่ ( NOT NULL) ฉันไม่ได้ตั้งสารเติม (ซึ่งดูเหมือนว่าจะเป็นการตัดสินใจที่ไม่ดีในการหวนกลับ) ฉันไม่มีปัญหาเกี่ยวกับพื้นที่ดิสก์เพียงต้องการให้เร็วที่สุดเท่าที่จะเป็นไปได้

2
วิธีสร้างคอลัมน์ในฐานข้อมูลด้วยสตริงสุ่มค่าเริ่มต้น
ฉันสามารถสร้างคอลัมน์ในตาราง DB (PostgreSQL) ซึ่งมีค่าเริ่มต้นสตริงแบบสุ่มได้อย่างไร หากเป็นไปไม่ได้โปรดแจ้งให้เราทราบ

6
การส่งผ่านอาร์กิวเมนต์ไปยัง psql
ฉันใช้งานสคริปต์ plpgsql ใน Postgres 8.3 - ฉันต้องการส่งอาร์กิวเมนต์ไปยังสคริปต์นี้ผ่าน psql ฉันกำลังใช้งานสคริปต์เช่น: psql -d database -u user -f update_file.sql ฉันเจอลิงค์นี้ซึ่งอธิบายตัวแปรสภาพแวดล้อมของ PGOPTIONS แต่นั่นไม่ได้ผลสำหรับอาร์กิวเมนต์ "กำหนดเอง" เช่นฉันได้รับข้อผิดพลาดเนื่องจากการตั้งค่าไม่ได้อยู่ในไฟล์ postgres.conf -bash-3.2$ export PGOPTIONS='--pretend=true' -bash-3.2$ psql -d my_db -f update_database.sql psql: FATAL: unrecognized configuration parameter "pretend" ความคิดอื่น ๆ ? เป็นการดีที่ฉันต้องการหลีกเลี่ยงตัวแปรสภาพแวดล้อม ...
10 postgresql  psql 

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