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

Bagaimana cara membuat indeks unik dengan kondisional dan subquery di PostgreSQL?

Kelemahan menggunakan aturan adalah aturan hanya menulis ulang kueri setelah diurai sehingga jika data ditambahkan melalui pemicu, itu tidak akan diaktifkan. Lebih aman untuk menambahkan batasan CHECK yang memanggil fungsi dengan logika Anda. Jika saya mengikuti logika Anda dengan benar, seharusnya seperti ini:

CREATE OR REPLACE FUNCTION check_user_client(fkc int) 
  RETURNS boolean AS
$$
DECLARE
  i int;
BEGIN
  SELECT count(*) INTO i FROM legal_entity WHERE fk_client = fkc;
  IF (i > 0) THEN
    RETURN true;
  END IF;

  SELECT count(*) INTO i FROM user_client WHERE fk_client = fkc;
  IF (i = 0) THEN
    RETURN true;
  END IF;

  RETURN false;  
END
$$ LANGUAGE plpgsql;

ALTER TABLE user_client ADD CONSTRAINT unique_user CHECK (check_user_client(fk_client));


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dapatkan baris yang diberi halaman dan jumlah total dalam satu kueri

  2. Pernyataan Siap sangat lambat, tetapi kueri manual cepat

  3. Status HTTP 500 - java.lang.NoClassDefFoundError:java/time/temporal/TemporalField saat menjalankan aplikasi di OpenShift

  4. Bagaimana make_timestamptz() Bekerja di PostgreSQL

  5. Tanggal penyimpanan dengan bulan / hari opsional