Sto utilizzando PostgreSQL 9.2 e devo aggiungere un vincolo condizionale su una colonna. In sostanza, voglio assicurarmi che una colonna sia falsa quando altre due colonne hanno un determinato valore.Postgres 9.2 - aggiungi controllo condizionale dei vincoli
gid | int_unsigned | not null default 0
realm | character varying(255) | not null default ''::character varying
grant_update | smallint_unsigned | not null default (0)::smallint
grant_delete | smallint_unsigned | not null default (0)::smallint
Esempio:
alter table node_access add constraint block_anonymous_page_edit
check (grant_update = 0 WHERE (gid = 1 AND realm = 'nodeaccess_rid'));
Ciò che dovrebbe fare è assicurarsi che grant_update è uguale a 0 quando GID è 1 e regno = nodeaccess_rid. Tuttavia, penso piuttosto che fare ciò che voglio, in realtà sto cercando di far sì che tutte le colonne imitino questi valori. In sostanza, sta cercando di assicurarsi che grant_update sia sempre 0, gid è sempre 1, e realm è sempre nodeaccess_rid. L'errore che ottengo è:
ERROR: check constraint "block_anonymous_page_edit" is violated by some row
EDIT
Credo che questo sta andando ad avere per essere una funzione che viene attivata aggiornata.
EDIT
ho aggiunto una riga alla domanda di cui sopra, e di conseguenza ha aggiornato la soluzione approvata con un commento qui sotto.
'' int_unsigned' e smallint_unsigned' sono tipi non-esistenti in Postgres . Per favore ripulisci la tua domanda. –
inesistente o no, è così che scorre il nostro database. La domanda, così com'è, è corretta. – thepriebe