PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

GALAT:lebih dari satu urutan yang dimiliki ditemukan di Postgres

Pembaruan: Bug ini telah diperbaiki di PostgreSQL v12 dengan komit 19781729f78 .
Jawaban lainnya relevan untuk versi yang lebih lama.

Sebuah serial kolom memiliki urutan yang dimiliki oleh kolom dan DEFAULT nilai yang mendapatkan nilai urutan bersih.

Jika Anda mencoba mengubah kolom tersebut menjadi kolom identitas, Anda akan mendapatkan pesan kesalahan bahwa sudah ada nilai default untuk kolom tersebut.

Sekarang Anda harus menjatuhkan nilai default, tetapi bukan urutan yang dimiliki serial kolom. Kemudian ketika Anda mengubah kolom menjadi kolom identitas, urutan kedua yang dimiliki oleh kolom tersebut dibuat.

Sekarang ketika Anda mencoba menyisipkan baris, PostgreSQL mencoba menemukan dan menggunakan the urutan yang dimiliki oleh kolom, tetapi ada dua, maka pesan kesalahannya.

Saya berpendapat bahwa ini adalah bug di PostgreSQL:menurut pendapat saya, itu seharusnya mengubah urutan yang ada untuk kolom identitas atau memberi Anda kesalahan bahwa sudah ada urutan yang dimiliki oleh kolom, dan Anda harus menjatuhkannya. Saya akan mencoba memperbaiki bug ini .

Sementara itu, Anda harus secara manual menghapus urutan yang tertinggal dari serial kolom.Jalankan kueri berikut:

SELECT d.objid::regclass
FROM pg_depend AS d
   JOIN pg_attribute AS a ON d.refobjid = a.attrelid AND
                             d.refobjsubid = a.attnum
WHERE d.classid = 'pg_class'::regclass
  AND d.refclassid = 'pg_class'::regclass
  AND d.deptype <> 'i'
  AND a.attname = 'patientid'
  AND d.refobjid = 'patient'::regclass;

Itu akan memberi Anda nama urutan yang tertinggal dari serial kolom. Jatuhkan, dan kolom identitas akan berperilaku seperti yang diinginkan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menghitung setof/jumlah kunci JSON di postgresql?

  2. Pemicu vs. batasan pemeriksaan

  3. Permintaan rekursif postgres dengan row_to_json

  4. postgresql tidak muncul di Sumber Data saat membuat .ADO.net Entity Data Model

  5. Hapus baris kosong