2011-10-31 14 views
11

Estoy usando postgreSQL. Tengo una columna que:SQL no está vacío en lugar de no es NULO

NOT NULL 

Sin embargo, cuando desea insertar una fila con una cadena vacía como como:

'' 

que no me da un error y acepta. ¿Cómo puedo comprobar que el valor de inserción debe ser not empty? (Ni vacío ni nulo)

PS: Mi columna define como:

"ads" character varying(60) NOT NULL 

Respuesta

16

agregar una restricción a la definición de la columna. Por ejemplo algo como:

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

Para más información, ver http://www.postgresql.org/docs/current/static/ddl-constraints.html

+0

¿Por qué haría referencia a la versión anterior 8.3? Consulte aquí para obtener más información: http://meta.stackexchange.com/questions/108714/best-way-to-reference-the-postgresql-manual –

+0

Buen punto, gracias. Solucionado mi respuesta. –

+1

También puede agregar un dominio si lo usa con más frecuencia: https://www.postgresql.org/docs/current/static/sql-createdomain.html – velop

7

encontrados en la current documentation of postgreSQL puede hacer lo siguiente para lograr lo que quiere:

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

De la documentación:

CHECK (expression)

La cláusula CHECK especifica una expresión que produce un resultado booleano que las filas nuevas o actualizadas deben cumplir para una operación de inserción o actualización para tener éxito. Las expresiones que evalúan TRUE o UNKNOWN tienen éxito. Si cualquier fila de una operación de inserción o actualización produce un resultado FALSO, se genera una excepción de error y la inserción o actualización no altera la base de datos. Una restricción de comprobación especificada como una restricción de columna debe referirse solo al valor de esa columna, mientras que una expresión que aparece en una restricción de tabla puede hacer referencia a múltiples columnas .

Actualmente, las expresiones CHECK no pueden contener subconsultas ni hacer referencia a variables que no sean columnas de la fila actual.

+0

PostgreSQL 8.2? La versión 8.2 fue lanzada en 2006 (!), Alcanza [fin de vida este año] (http://wiki.postgresql.org/wiki/PostgreSQL_Release_Support_Policy). Haga referencia '/ current' si no necesita direccionar una versión anterior. Más información aquí: http://meta.stackexchange.com/questions/108714/best-way-to-reference-the-postgresql-manual –

+1

Tnx para su pista. Lo corregí en mi respuesta. – micfra

Cuestiones relacionadas