PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

PostgreSQL विदेशी कुंजी शर्त के लिए बाधा की जाँच करें

यह INSERTS के लिए काम करेगा:

create or replace function is_superuser(int) returns boolean as $$
select exists (
    select 1
    from "user"
    where id   = $1
      and superuser = true
);
$$ language sql;

और फिर user_has_job टेबल पर एक चेक कॉन्ट्रैंट:

create table user_has_job (
    user_id integer references "user"(id),
    job_id integer references job(id),
    constraint user_has_job_pk PRIMARY KEY (user_id, job_id),
    constraint chk_is_superuser check (is_superuser(user_id))
);

डालने के लिए काम करता है:

postgres=# insert into "user" (name,superuser) values ('name1',false);
INSERT 0 1
postgres=# insert into "user" (name,superuser) values ('name2',true);
INSERT 0 1

postgres=# insert into job (description) values ('test');
INSERT 0 1
postgres=# insert into user_has_job (user_id,job_id) values (1,1);
ERROR:  new row for relation "user_has_job" violates check constraint "chk_is_superuser"
DETAIL:  Failing row contains (1, 1).
postgres=# insert into user_has_job (user_id,job_id) values (2,1);
INSERT 0 1

हालांकि यह संभव है:

postgres=# update "user" set superuser=false;
UPDATE 2

इसलिए यदि आप उपयोगकर्ताओं को अपडेट करने की अनुमति देते हैं तो आपको उपयोगकर्ता तालिका पर एक अपडेट ट्रिगर बनाने की आवश्यकता है ताकि उपयोगकर्ता के पास नौकरी हो तो इसे रोका जा सके।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostreSQL में केवल नई पंक्तियाँ कैसे सम्मिलित करें?

  2. स्थानीय PostgreSQL से कनेक्ट नहीं हो सकता

  3. PostgreSQL में सीक्वल रत्न का उपयोग करके एक सरणी सम्मिलित करना

  4. डॉकर पर अपने पोस्टग्रेएसक्यूएल बैकअप को मान्य करना

  5. मैं पोस्टग्रेज इंस्टालेशन के दौरान दर्ज किया गया पासवर्ड भूल गया हूं