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

Geser (perbarui) nilai kolom unik di PostgreSQL

Ini memang agak membingungkan karena semua batasan lain dievaluasi pada level pernyataan, hanya batasan PK/unik yang dievaluasi pada level per baris selama operasi DML.

Tetapi Anda dapat mengatasinya dengan mendeklarasikan batasan kunci utama sebagai dapat ditangguhkan:

create table tbl_test 
(
  testkey   INTEGER,
  constraint pk_tbl_test primary key (testkey) deferrable initially immediate
);

insert into tbl_test values (1), (2);

set constraints all deferred;

update tbl_test
   set testkey = testkey +1;

Batasan yang ditangguhkan memang memiliki beberapa overhead, jadi dengan mendefinisikannya sebagai initially immediate overhead ini dijaga agar tetap minimum. Anda dapat menunda evaluasi kendala saat Anda membutuhkannya dengan menggunakan set constraint .

Namun pertanyaan sebenarnya adalah:mengapa Anda perlu melakukan ini pada nilai kunci utama? Nilai PK tidak memiliki arti apa pun, jadi sepertinya tidak perlu menambah semua nilai (terlepas dari DBMS yang digunakan)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Meneliti kelambatan PostGIS (edisi 2019)

  2. Mengapa pg_restore berhasil kembali tetapi tidak benar-benar memulihkan database saya?

  3. 2 Cara Mengembalikan Baris yang Hanya Mengandung Karakter Alfanumerik di PostgreSQL

  4. Migrasi dari Postgres ke SQL Server 2008

  5. Psycopg / Postgres :Koneksi hang out secara acak