Quali sono i buoni modi per aggiungere un vincolo a PostgreSQL per verificare che esattamente una colonna (da un insieme di colonne) contenga un valore non nullo?Il vincolo Postgres garantisce che una colonna di molti sia presente?
Aggiornamento: E 'probabile che voglio usare un'espressione check
come dettagliato nella Create Table e Alter Table.
Aggiornamento: Sto osservando lo functions disponibile.
Aggiornamento: Solo per lo sfondo, qui è la logica di convalida Rails Attualmente sto usando:
validate :multi_column_validation
def multi_column_validation
n = 0
n += 1 if column_1
n += 1 if column_2
n += 1 if column_3
unless 1 == n
errors.add(:base, "Exactly one column from " +
"column_1, column_2, column_3 must be present")
end
end
Per essere chiari, io sto cercando PSQL, non Ruby, qui. Volevo solo mostrare la logica che sto usando poiché è più compatto di enumerare tutte le possibilità della "tavola della verità".
Queste colonne sono booleani? –
Clodoaldo: Sono interessato a NULL o NOT NULL. (Nel mio caso specifico, ho un mix di colonne UUID e TEXT, ma non penso che questo sia fondamentale per il problema.) –