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

โดยเฉพาะสำหรับ PostgreSQL เวอร์ชัน 9.5

1
PostgreSQL ลบจากล้มเหลวด้วยข้อผิดพลาด: พยายามที่จะลบ tuple ที่มองไม่เห็น
คำถามนี้ถูกโยกย้ายจาก Server Fault เนื่องจากสามารถตอบได้ใน Exchange Administrators Stack Exchange อพยพ 3 ปีที่แล้ว ความผิดพลาด กำลังพยายามลบสิ่งอันดับที่มีการประทับเวลาที่ไม่ถูกต้องด้วย DELETE FROM comments WHERE date > '1 Jan 9999' OR date < '1 Jan 2000' OR date_found > '1 Jan 9999' OR date_found < '1 Jan 2000'; สิ้นสุดลงใน ERROR: attempted to delete invisible tuple มีรายชื่อผู้รับจดหมายจากปี 2009 ที่พูดถึงข้อความแสดงข้อผิดพลาดเดียวกันที่ …

2
วิธีรับ ID ของแถวที่ขัดแย้งกันใน upsert?
ฉันมีตารางที่tagมี 2 ​​คอลัมน์: id(uuid) และname(ข้อความ) ตอนนี้ฉันต้องการแทรกแท็กใหม่ลงในตาราง แต่ถ้ามีแท็กนั้นอยู่แล้วฉันต้องการเพียงรับidบันทึกที่มีอยู่ ฉันคิดว่าฉันสามารถใช้ON CONFLICT DO NOTHINGร่วมกับRETURNING "id": INSERT INTO "tag" ("name") VALUES( 'foo' ) ON CONFLICT DO NOTHING RETURNING "id"; แต่จะส่งคืนชุดผลลัพธ์ที่ว่างเปล่าหากมีแท็กชื่อ "foo" อยู่แล้ว ฉันเปลี่ยนแบบสอบถามเพื่อใช้ส่วนDO UPDATEคำสั่งnoop : INSERT INTO "tag" ("name") VALUES( 'foo' ) ON CONFLICT ("name") DO UPDATE SET "name" = 'foo' RETURNING "id"; มันใช้งานได้ตามที่ตั้งใจ …

2
UPSERT ที่มีความขัดแย้งโดยใช้ค่าจากตารางแหล่งที่มาในส่วน UPDATE
ได้รับ: CREATE TABLE A ( PK_A INT8 NOT NULL, A INT8, PRIMARY KEY (PK_A) ); CREATE TABLE B ( PK_B INT8 NOT NULL, B INT8, PRIMARY KEY (PK_B) ); แบบสอบถามนี้: insert into table_b (pk_b, b) select pk_a,a from table_a on conflict (b) do update set b=a; ทำให้เกิดข้อผิดพลาดดังต่อไปนี้: ERROR: column "a" …

1
Postgres: SET NOT NULL เป็นอย่างไร "มีประสิทธิภาพมากขึ้น" กว่าข้อ จำกัด การตรวจสอบ
ในเอกสาร PostgreSQL สำหรับข้อ จำกัดกล่าวว่า ข้อ จำกัด แบบไม่เป็นโมฆะเทียบเท่ากับการสร้างข้อ จำกัด การตรวจสอบCHECK (column_name IS NOT NULL)แต่ใน PostgreSQL การสร้างข้อ จำกัด แบบไม่เป็นโมฆะอย่างชัดเจนนั้นมีประสิทธิภาพมากกว่า ฉันสงสัย "มีประสิทธิภาพมากขึ้น" หมายความว่าอย่างไร สิ่งที่เป็นอันตรายของการใช้งานCHECK (column_name IS NOT NULL)แทนSET NOT NULL? ฉันต้องการเพิ่มNOT VALID CHECKข้อ จำกัด และตรวจสอบความถูกต้องแยกต่างหาก (ดังนั้นAccessExclusiveLockจะถูกเก็บไว้ในช่วงเวลาสั้น ๆ เท่านั้นสำหรับการเพิ่มข้อ จำกัด และจากนั้น a ShareUpdateExclusiveLockจะถูกเก็บไว้สำหรับขั้นตอนการตรวจสอบที่ยาวขึ้น): ALTER TABLE table_name ADD CONSTRAINT column_constraint CHECK (column_name IS NOT NULL) …

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 …

1
ทำความเข้าใจกับค่าเริ่มต้นของพารามิเตอร์“ max_wal_size” และ“ min_wal_size” จากไฟล์ postgresql.conf
ค่าเริ่มต้นคือตามเอกสารประกอบสำหรับmin_wal_sizeและmax_wal_sizeพารามิเตอร์ : สำหรับmax_wal_size: The default is 1 GB สำหรับmin_wal_size:The default is 80 MB จากนั้นฉันดูพารามิเตอร์นี้จากการกำหนดค่าฐานข้อมูลของฉัน: select name, setting, unit from pg_settings where name in ('min_wal_size', 'max_wal_size') ให้ผลลัพธ์: name | setting | unit ---------------------------------- max_wal_size | 64 | min_wal_size | 5 | ฉันมีคำถาม 2 ข้อ: 1) เหตุใดค่าเหล่านี้จึงไม่ตรงกับค่าเริ่มต้นซึ่งแสดงในเอกสาร ฉันไม่เคยเปลี่ยนการตั้งค่าคอนฟิกเลย 2) ทำไมunitคอลัมน์ว่างเปล่า / NULL …

1
psql 9.5: gen_random_uuid () ไม่ทำงาน
SELECT gen_random_uuid() ผลิตผล ERROR: function gen_random_uuid() does not exist SQL state: 42883 Hint: No function matches the given name and argument types. You might need to add explicit type casts. ฉันรันCREATE EXTENSION pgcrypto;บนฐานข้อมูลที่เลือกและSELECT gen_random_bytes(1)ทำงานได้อย่างสมบูรณ์ ( gen_random_bytesไม่ทำงานบนฐานข้อมูลอื่นที่pgcryptoไม่ได้สร้างส่วนขยายด้วยตนเอง) % psql --version psql (PostgreSQL) 9.5.3 รุ่นของ Ubuntu คือ 16.04

3
ฉันจะคืนค่าเรคคอร์ดหลายแถวใน PL / pgSQL ได้อย่างไร
ฉันกำลังพยายามส่งคืนหลายระเบียนโดยใช้ชนิดข้อมูล RECORD มีวิธีที่ฉันสามารถผนวกเข้ากับ RECORD และเพิ่ม / ผนวกค่าใหม่ด้วยการวนซ้ำแต่ละครั้งในการบันทึกนี้ นั่นคือฉันต้องการผนวกrecเพื่อที่recจะกลายเป็นชุดของแถวเมื่อวนซ้ำซึ่งฉันสามารถกลับมาที่ส่วนท้ายของฟังก์ชั่นของฉัน ขณะนี้ฉันกำลังทำสิ่งนี้ - SELECT temp_table.col1, temp_table.col2, temp_table.col3 INTO rec FROM temp_table WHERE temp_table.col3 = false; รหัสเต็มของฉันอยู่ที่นี่: CREATE OR REPLACE FUNCTION validation() RETURNS RECORD AS $$ DECLARE rec RECORD; temp_row RECORD; BEGIN CREATE TEMPORARY TABLE temp_table (col1 TEXT, col2 INTEGER, col3 BOOLEAN) ON COMMIT …

1
การสืบค้น JSONB ใน PostgreSQL
ฉันมีตารางpersonsซึ่งมีสองคอลัมน์และคอลัมน์ที่idใช้ JSONB data(ตารางนี้เพิ่งสร้างขึ้นเพื่อวัตถุประสงค์ในการสาธิตเพื่อเล่นกับการสนับสนุน JSON ของ PostgreSQL) ตอนนี้มันควรจะมีสองบันทึก: 1, { name: 'John', age: 30 } 2, { name: 'Jane', age: 20 } ตอนนี้ฉันควรจะได้ชื่อของทุกคนที่อายุมากกว่า 25 แล้วสิ่งที่ฉันได้ลองคือ: select data->'name' as name from persons where data->'age' > 25 น่าเสียดายที่นี่ทำให้เกิดข้อผิดพลาด ฉันสามารถแก้ไขได้โดยใช้->>แทน->แต่จากนั้นการเปรียบเทียบไม่ทำงานตามที่คาดไว้อีกต่อไปเนื่องจากไม่ใช่การเปรียบเทียบตัวเลข แต่การแสดงเป็นสตริง select data->'name' as name from persons where data->>'age' > '25' จากนั้นฉันก็พบว่าฉันสามารถแก้ปัญหาได้จริงโดยใช้->และนักแสดงไปที่int: select data->'name' …

2
ปัญหา PostgreSQL UPSERT ด้วยค่า NULL
ฉันมีปัญหากับการใช้คุณสมบัติใหม่ของ UPSERT ใน Postgres 9.5 ฉันมีตารางที่ใช้สำหรับรวบรวมข้อมูลจากตารางอื่น คีย์ผสมประกอบด้วย 20 คอลัมน์โดย 10 ซึ่งสามารถเป็นโมฆะได้ ด้านล่างฉันได้สร้างรุ่นที่เล็กกว่าของปัญหาที่ฉันมีโดยเฉพาะกับค่าเป็นศูนย์ CREATE TABLE public.test_upsert ( upsert_id serial, name character varying(32) NOT NULL, status integer NOT NULL, test_field text, identifier character varying(255), count integer, CONSTRAINT upsert_id_pkey PRIMARY KEY (upsert_id), CONSTRAINT test_upsert_name_status_test_field_key UNIQUE (name, status, test_field) ); การเรียกใช้คิวรีนี้ทำงานได้ตามต้องการ (แทรกครั้งแรกจากนั้นแทรกตามมาก็เพิ่มจำนวน): INSERT INTO …

1
PostgreSQL 9.5 จะไม่เริ่มทำงานหลังจากที่ Windows 10 fall update
ฉันได้ติดตั้ง Windows 10 Fall update (1709) และตอนนี้เซิร์ฟเวอร์ PostgreSQL 9.5 ของฉันจะไม่เริ่มทำงาน ทำงานเมื่อวานนี้ก่อนการอัปเดตและฉันไม่ได้ทำการเปลี่ยนแปลงใด ๆ กับการกำหนดค่า ฉันได้ตรวจสอบตัวแสดงเหตุการณ์แล้วและพบข้อความแสดงข้อผิดพลาด: 2017-10-19 11:32:32 CEST LOG: invalid value for parameter "lc_monetary": "Czech_Czech Republic.1250" 2017-10-19 11:32:32 CEST LOG: invalid value for parameter "lc_numeric": "Czech_Czech Republic.1250" 2017-10-19 11:32:32 CEST LOG: invalid value for parameter "lc_time": "Czech_Czech Republic.1250" 2017-10-19 11:32:32 CEST …

2
ข้อ จำกัด - หนึ่งแถวบูลีนเป็นจริงแถวอื่นทั้งหมดเป็นเท็จ
ฉันมีคอลัมน์: standard BOOLEAN NOT NULL ฉันต้องการบังคับใช้หนึ่งแถวจริงและอื่น ๆ ทั้งหมดเป็นเท็จ ไม่มีของ FK หรือสิ่งอื่นใดขึ้นอยู่กับข้อ จำกัด นี้ ฉันรู้ว่าฉันสามารถทำได้ด้วย plpgsql แต่ดูเหมือนว่าค้อนขนาดใหญ่ ฉันต้องการบางสิ่งบางอย่างเช่นCHECKหรือUNIQUEข้อ จำกัด ง่ายกว่าดีกว่า แถวหนึ่งต้องเป็นจริงพวกเขาไม่สามารถเป็นเท็จได้ทั้งหมด (ดังนั้นแถวแรกที่แทรกจะต้องเป็นจริง) แถวจะต้องได้รับการอัปเดตซึ่งหมายความว่าฉันต้องรอตรวจสอบข้อ จำกัด จนกว่าการอัปเดตจะเสร็จสิ้นเนื่องจากแถวทั้งหมดอาจถูกตั้งค่าเป็นเท็จก่อนและหนึ่งแถวจริงหลังจากนั้น มี FK ระหว่างproducts.tax_rate_idและtax_rate.idแต่ไม่มีอะไรเกี่ยวข้องกับอัตราภาษีเริ่มต้นหรือมาตรฐานซึ่งผู้ใช้สามารถเลือกเพื่อสร้างผลิตภัณฑ์ใหม่ได้อย่างง่ายดาย .. PostgreSQL 9.5 ถ้าเป็นเรื่องสำคัญ พื้นหลัง ตารางคืออัตราภาษี อัตราภาษีอย่างใดอย่างหนึ่งคือค่าเริ่มต้น ( standardเนื่องจากค่าเริ่มต้นคือคำสั่ง Postgres) เมื่อมีการเพิ่มผลิตภัณฑ์ใหม่อัตราภาษีมาตรฐานจะถูกนำไปใช้กับผลิตภัณฑ์ หากไม่มีstandardอยู่ฐานข้อมูลต้องทำการเดาหรือเช็คที่ไม่จำเป็นทุกชนิด standardทางออกที่ง่ายผมคิดว่าคือการทำให้แน่ใจว่ามี ตามค่าเริ่มต้น "" ด้านบนฉันหมายถึงเลเยอร์การนำเสนอ (UI) มีตัวเลือกผู้ใช้สำหรับการเปลี่ยนแปลงอัตราภาษีเริ่มต้น ฉันต้องเพิ่มการตรวจสอบพิเศษเพื่อให้แน่ใจว่า GUI / ผู้ใช้ไม่พยายามตั้งค่า tax_rate_id …

1
วิธีการเปรียบเทียบ xmin และ txid_current () หลังจากการทำธุรกรรม ID wraparound?
นอกจากคอลัมน์ปกติแล้วตาราง Postgres ยังมีคอลัมน์ระบบต่าง ๆให้ใช้งาน หนึ่งในนั้นxminเก็บ ID ธุรกรรมที่ใช้ในการสร้างแถว ชนิดข้อมูลของมันคือxidจำนวนเต็มสี่ไบต์ที่ล้อมรอบในบางจุด (เช่นไม่จำเป็นต้องไม่ซ้ำกัน) ฟังก์ชันtxid_current()จะส่งคืน ID ธุรกรรมปัจจุบัน แต่bigintเนื่องจาก "ขยาย" ด้วยตัวนับ "ยุค" ดังนั้นมันจะไม่ล้อมรอบในช่วงอายุการติดตั้ง "(เพื่ออ้างอิงคู่มือ ) หากการรวมธุรกรรมไม่ได้เกิดขึ้นค่าทั้งคู่ดูเหมือนจะตรงกัน: # CREATE TABLE test (label text); CREATE TABLE # INSERT INTO test VALUES ('test') RETURNING txid_current(); txid_current -------------- 674500 (1 row) INSERT 0 1 # SELECT xmin FROM test; xmin …

1
ประสิทธิภาพของ postgres_fdw ช้า
แบบสอบถามต่อไปนี้ในต่างประเทศใช้เวลาประมาณ 5 วินาทีในการดำเนินการกับ 3.2 ล้านแถว: SELECT x."IncidentTypeCode", COUNT(x."IncidentTypeCode") FROM "IntterraNearRealTimeUnitReflexes300sForeign" x WHERE x."IncidentDateTime" >= '05/01/2016' GROUP BY x."IncidentTypeCode" ORDER BY 1; เมื่อฉันเรียกใช้คิวรีเดียวกันในตารางปกติมันจะส่งคืนภายใน 0.6 วินาที แผนการดำเนินการแตกต่างกันมาก: ตารางปกติ Sort (cost=226861.20..226861.21 rows=4 width=4) (actual time=646.447..646.448 rows=7 loops=1) Sort Key: "IncidentTypeCode" Sort Method: quicksort Memory: 25kB -> HashAggregate (cost=226861.12..226861.16 rows=4 width=4) (actual time=646.433..646.434 rows=7 …

1
รีเฟรชมุมมองที่เป็นรูปธรรมของ PostgreSQL โดยอัตโนมัติโดยไม่ต้องใช้ทริกเกอร์
ฉันสร้างมุมมองที่มีชื่อปรากฏบนโต๊ะห่อหุ้มข้อมูลต่างประเทศview_table_A สิ่งที่ฉันต้องการสำหรับมุมมองที่จะได้รับการปรับปรุงโดยอัตโนมัติทุกครั้งหลังใส่ใหม่table_A table_Aฉันพยายามทำสิ่งนี้ด้วยทริกเกอร์ แต่มันไม่ทำงาน เป็นไปได้ไหมที่จะรีเฟรชมุมมองที่ปรากฏขึ้นโดยอัตโนมัติโดยไม่ใช้ทริกเกอร์

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