2011-10-31 10 views
11

Sto usando postgreSQL. Ho una colonna che:SQL Not Empty invece di Not NULL

NOT NULL 

Tuttavia quando voglio inserire una riga con una stringa vuota come come:

'' 

non mi dà un errore e accetta. Come posso verificare che il valore inserito sia not empty? (Né vuoto né nullo)

PS: mia colonna definita come:

"ads" character varying(60) NOT NULL 

risposta

16

aggiungere un vincolo alla definizione di colonna. Per esempio qualcosa come:

ads character varying(60) NOT NULL CHECK (ads <> '') 

Per di più, si veda http://www.postgresql.org/docs/current/static/ddl-constraints.html

+0

Perché si fa riferimento alla versione precedente 8.3? Vedi qui per maggiori informazioni: http://meta.stackexchange.com/questions/108714/best-way-to-reference-the-postgresql-manual –

+0

Buon punto, grazie. Risolto il problema con la mia risposta –

+1

Puoi anche aggiungere un dominio se lo usi più spesso: https://www.postgresql.org/docs/current/static/sql-createdomain.html – velop

7

trovati nelle current documentation of postgreSQL è possibile effettuare le seguenti operazioni per ottenere ciò che si vuole:

CREATE TABLE distributors (
    did integer PRIMARY KEY DEFAULT nextval('serial'), 
    name varchar(40) NOT NULL CHECK (name <> '') 
); 

Dalla documentazione:

CHECK (expression)

La clausola CHECK specifica un'espressione che produce un risultato booleano che le righe nuove o aggiornate devono soddisfare per un'operazione di inserimento o aggiornamento per l'operazione riuscita. Le espressioni valutano TRUE o SCONTE . Se una riga di un'operazione di inserimento o di aggiornamento produce un risultato FALSE , viene generata un'eccezione di errore e l'inserimento o l'aggiornamento non altera il database. Un vincolo di controllo specificato come vincolo di colonna dovrebbe fare riferimento solo al valore di quella colonna, mentre un'espressione visualizzata in un vincolo di tabella può fare riferimento a più colonne .

Attualmente, le espressioni CHECK non possono contenere subquery né fare riferimento a variabili diverse da colonne della riga corrente.

+0

PostgreSQL 8.2? La versione 8.2 è stata rilasciata nel 2006 (!), Raggiunge [fine della vita di quest'anno] (http://wiki.postgresql.org/wiki/PostgreSQL_Release_Support_Policy). Si prega di fare riferimento a '/ current' se non è necessario indirizzare una vecchia versione. Maggiori informazioni qui: http://meta.stackexchange.com/questions/108714/best-way-to-reference-the-postgresql-manual –

+1

Tnx per il tuo suggerimento. L'ho corretto nella mia risposta. – micfra