CREATE [ TEMPORARY | TEMP ] TABLE table ( column type [ NULL | NOT NULL ] [ UNIQUE ] [ DEFAULT value ] [column_constraint_clause | PRIMARY KEY } [ ... ] ] [, ... ] [, PRIMARY KEY ( column [, ...] ) ] [, CHECK ( condition ) ] [, table_constraint_clause ] ) [ INHERITS ( inherited_table [, ...] ) ] |
Se crea la tabla s�lo para esta sesi�n, y es eliminada autom�ticamente con el fin de la sesi�n. Las tablas permanentes existentes con el mismo nombre no son visibles mientras la table temporal existe.
El nombre de una nueva clase o tabla a crear.
El nombre de un campo.
El tipo del campo. Puede incluir especificadores de array. Consulte la PostgreSQL User's Guide para m�s informaci�n sobre tipos y arrays.
Un valor por defecto para el campo. Consulte la cl�usula DEFAULT para m�s informaci�n.
La cl�usula opcional de restricciones (constraint) especifica una lista de restricciones de integridad o comprueba que las nuevas inserciones o actualizaciones deben satisfacer para que la inserci�n o la actualizaci�n tenga �xito. Cada restricci�n debe evaluarse a una expresi�n booleana. Aunque SQL92 requiere la column_constraint_clause para referirse a ese campo s�lamente, Postgres permite que m�ltiples campos sean referenciados dentro de un �nico campo constraint. Consulte la cl�usula constraint para m�s informaci�n.
La cl�usula opcional CONSTRAINT especifica una lista de restricciones de integridad que las nuevas inserciones o las actualizaciones deber�n satisfacer para que una sentencia insert o update tenga �xito. Cada restricci�n debe ser evaluada a una expresi�n booleana. Se pueden referenciar m�ltiples campos con una �nica restricci�n. S�lo se puede definir una �nica cl�usula PRIMARY KEY por tabla; PRIMARY KEY column (una restricci�n de tabla) and PRIMARY KEY (una restricci�n de campo) son mutuamente excluyentes. Consulte la cl�usula de restricci�n de tabla para m�s informaci�n.
La cl�usula opcional INHERITS especifica una colecci�n de nombres de tabla de las cuales esta tabla hereda todos los campos. Si alg�n campo heredado aparece m�s de una vez, Postgres informa de un error. Postgres permite autom�ticamente a la tabla creada heredar funciones de las tablas superiores a ella en la jerarqu�a de herencia.
Aside | |
---|---|
La herencia de funciones se realiza siguiendo las convenciones del Common Lisp Object System (CLOS). |
Mensaje devuelto si la table se ha creado con �xito.
Mensaje devuelto si la creaci�n de la tabla falla. Este mensaje viene normalmente acompa�ado por alg�n texto explicativo, como: ERROR: Relation 'table' already exists que ocurre en tiempo de ejecuci�n, si la tabla especificada ya existe en la base de datos.
Si el tipo de datos o el valor por defecto no corresponde al tipo de datos de la definici�n del campo.
CREATE TABLE introducir� una nueva clase o tabla en la base de datos actual. La tabla ser� pose�da por el usuario que introduce la sentencia.
Cada type puede ser un tipo simple, un tipo complejo (set) o un tipo array. Cada atributo puede ser especificado para ser no nulo, y puede tener un valor por defecto, especificado por la Cl�usula DEFAULT.
Al igual que en la versi�n 6.0 de Postgres, consistant array dimensions within an attribute are not enforced. Esto cambiar� probablemente en las versiones futuras. |
La cl�usula opcional INHERITS especifica una colecci�n de nombres de clases de los cuales esta clase hereda autom�ticamente todos los campos. Si cualquier nombre de campo heredado aparece m�s de una vez, Postgres informa de un error. Postgres permite autom�ticamente a la clase creada heredar funciones de clases superiores en la jerarqu�a de herencia. La herencia de funciones se hace siguiendo las convenciones del Common Lisp Object System (CLOS).
Cada nueva tabla o clase table es creada autom�ticamente como tipo. Por tanto, una o m�s instancias de la clase son autom�ticamente un tipo y pueden ser usadas en otras MODIFICAR TABLA sentencias CREATE TABLE.
The new table is created as a heap with no initial data. Una tabla no puede tener m�s de 1600 campos (realmente, esto viene limitado por el hecho que el m�ximo tama�o de una tupla debe ser menor que 8192 bytes), pero este l�mite puede ser configurado a un tama�o menor en algunos sitios. Una tabla no puede tener el mismo nombre que una tabla de cat�logo del sistema.
DEFAULT value |
Los posibles valores para la expresi�n DEFAULT (valor por defecto) son:
un literal
una funci�n de usuario
una funci�n niladic
La cl�usula DEFAULT asigna una valor por defecto a un campo (a trav�s de una definici�n de campo en la sentencia CREATE TABLE). El tipo de dato de un valor por defecto debe corresponder al tipo de dato de la definici�n del campo.
Una operaci�n de inserci�n (INSERT) que incluya un campo sin un valor especificado por defecto asignar� el valor NULL al campo si no se le proporciona un valor expl�cito. Si el valor por defecto es un literal significa que que es un valor constante. Si el valor por defecto es una niladic-function o una user-function significa que dicho valor es el de la funci�n especificada en el momento de la inserci�n.
Hay dos tipos de funciones niladic:
Consulte las funciones CURRENT_USER
todav�a no soportadas
todav�a no soportadas
Consulte las funciones CURRENT_DATE
Consulte las funciones CURRENT_TIME
Consulte la funci�n CURRENT_TIMESTAMP
En la versi�n actual (v6.5), Postgres eval�a todas las expresiones por defecto en el momento en que la tabla es definida. Por tanto, las funciones que son "non-cacheable" como CURRENT_TIMESTAMP pueden no producir el efecto deseado. Para el caso particular de tipos date/time , se puede trabajar sobre este comportamiento usando "DEFAULT TEXT 'now'" en lugar de "DEFAULT 'now'" o "DEFAULT CURRENT_TIMESTAMP". Esto fuerza Postgres a considerar la constante como un tipo string y as� convertirla al valor timestamp en tiempo de ejecuci�n.
Para asignar un valor constante como valor por defecto para los campos did and number, y una cadena al campo did:
CREATE TABLE video_sales ( did VARCHAR(40) DEFAULT 'luso films', number INTEGER DEFAULT 0, total CASH DEFAULT '$0.0' ); |
Para asignar una secuencia existente como valor por defecto para el campo did, y un literal para el campo name:
CREATE TABLE distributors ( did DECIMAL(3) DEFAULT NEXTVAL('serial'), name VARCHAR(40) DEFAULT 'luso films' ); |
[ CONSTRAINT name ] { [ NULL | NOT NULL ] | UNIQUE | PRIMARY KEY | CHECK constraint } [, ...] |
Un nombre arbitrario dado a la restricci�n de integridad Si no se especifica name, se genera de los nombres de l tabla y campos, lo que asegura unicidad para name.
El campo puede contener valores NULL. �sta es la opci�n por defecto.
El campo no puede contener valores NULL. Esto equivale a la restricci�n de campo CHECK (column NOT NULL).
El campo debe contener un valor �nico. En Postgres esto es forzado por medio de la creaci�n impl�cita de un �ndice �nico sobre la tabla.
Este campo es una clave primaria, lo que implica que la unicidad es forzada por el sistema y que otras tablas pueden confiar en este campo como identificador �nico para los registros. Consulte PRIMARY KEY para m�s informaci�n.
La definici�n de la restricci�n.
La cl�usula opcional de restricci�n (CONSTRAINT) especifica restricciones o verifica qu� deben cumplir las nuevas inserciones o las actualizaciones para que una operaci�n de inserci�n o de actualizaci�n tenga �xito. Cada restricci�n debe evaluarse a una expresi�n booleana. Con una �nica restricci�n se pueden referenciar m�ltiples atributos. El uso de PRIMARY KEY como restricci�n de tabla es mutuamente incompatible con el uso de PRIMARY KEY como restricci�n de campo.
Una restricci�n es una regla con nombre: un objeto SQL que ayuda a definir conjuntos de valores v�lidos poniendo l�mites a los resultados de las operaciones INSERT, UPDATE or DELETE sobre una tabla.
Existen dos maneras de definir restricciones de integridad: restricciones de tabla, que veremos m�s adelante, y restricciones de campo, que pasamos a ver.
Una restricci�n de campo es una restricci�n de integridad definida como parte de la definici�n de campo, y l�gicamente se convierte en una restricci�n de tabla nada m�s ser creada. Las restricciones de campo disponibles son:
PRIMARY KEY |
REFERENCES |
UNIQUE |
CHECK |
NOT NULL |
Postgres todav�a no soporta (en su versi�n 6.5) restricciones de integridad especificadas por REFERENCES. Se acepta la sintaxis pero se ignora la cl�usula (disponible, en cambio, a partir de la versi�n 7.0) |
[ CONSTRAINT name ] NOT NULL |
La restricci�n NOT NULL especifica una regla que obliga que un campo contenga �nicamente valores no nulos. �sta es �nicamente una restricci�n de campo, y no se permite como restricci�n de tabla..
[ CONSTRAINT name ] UNIQUE |
Este error ocurre en tiempo de ejecuci�n si se intenta insertar un valor duplicado en un campo.
La restricci�n UNIQUE especifica una regla que obliga a un grupo de uno o m�s campos de una tabla a contener valores �nicos.
Las definiciones de campo de las columnas especificadas no tienen porqu� incluir una restricci�n NOT NULL constraint para ser inclu�dos en una restricci�n UNIQUE. Tener m�s de un valor nulo en un campo sin la restricci�n NOT NULL, no viola la restricci�n UNIQUE. (This deviates from the SQL92 definition, but is a more sensible convention. See the section on compatibility for more details.).
Cada restricci�n de campo UNIQUE debe nombrar un campo que es distitno del conjunto de campos nombrados por cualquier otra restricci�n UNIQUE o PRIMARY KEY definifas por la tabla.
Postgres crea autom�ticamente un �ndice �nico por cada restricci�n UNIQUE, para asegurar la integridad de los datos. Vea CREATE INDEX para m�s informaci�n. |
Define una restricci�n de campo UNIQUE para la tabla distributors. Las restricciones de campo UNIQUE solo son definidas sobre un campo de la tabla:
CREATE TABLE distributors ( did DECIMAL(3), name VARCHAR(40) UNIQUE ); |
CREATE TABLE distributors ( did DECIMAL(3), name VARCHAR(40), UNIQUE(name) ); |
[ CONSTRAINT name ] CHECK ( condition [, ...] ) |
Un nombre arbitrario dado a la restricci�n.
Cualquier expresi�n condicional v�lida que se evalue a un resultado boolenano.
Este error ocurre en tiempo de ejecuci�n si alguien intenta insertar un valor ilegal en un campo sujeto a una restricci�n CHECK.
La restricci�n CHECK especifica una restricci�n sobre los valores permitidos en un campo. La restricci�n CHECK tambi�n se permite como restricci�n de tabla.
Las resticciones de campo CHECK de SQL92 s�lo pueden ser definidas sobre un campo de la tabla, y solamente pueden referirse a un campo. Postgres no tiene esta restricci�n.
[ CONSTRAINT name ] PRIMARY KEY |
Esto ocurre en tiempo de ejecuci�n si alguien intenta insertar un valor duplicado en una columna sujeta a una restricci�n PRIMARY KEY.
La restricci�n de campo PRIMARY KEY especifica que un campo de una tabla solamente puede contener valores �nicos (no duplicados) y no nulos . La definici�n de la columna especificada no tiene que incluir una restricci�n expl�cita NOT NULL para ser inclu�da en una restricci�n PRIMARY KEY.
S�lo se puede especificar una �nica clave primaria (PRIMARY KEY) por tabla.
Postgres crea autom�ticamente un �ndice �nico para asegurar la integridad de los datos. (Vea la sentencia CREATE INDEX)
La restricci�n de clave primaria (PRIMARY KEY) debe nombrar un conjunto de campos que no sean contenidos por ninguna otra restricci�n UNIQUE definidos por la misma tabla, ya que producir�a una duplicaci�n de �ndices equivalentes y una sobrecarga adicional en tiempo de ejecuci�n. Sin embargo, Postgres no lo deshabilita espec�ficamente.
[ CONSTRAINT name ] { PRIMARY KEY | UNIQUE } ( column [, ...] ) [ CONSTRAINT name ] CHECK ( constraint ) |
Un nombre arbitrario dado a una restricci�n de integridad.
El nombre de los campos para los que definimos un �ndice �nico y, para la PRIMARY KEY, una restricci�n NOT NULL.
Una expresi�n booleana a ser evaluado como la restricci�n.
Las posibles salidas para la cl�usula de restricci�n de tablas son las mismas que para las partes correspondientes de la cl�usula restricci�n de campo.
Una restricci�n de tabla es una restricci�n de integridad definidad sobre uno o m�s campos de una tabla base. Las cuatro variaciones de restricciones de tabla son:
UNIQUE |
CHECK |
PRIMARY KEY |
FOREIGN KEY |
Postgres todav�a no soporta (en su versi�n 6.5) las restricciones de integridad FOREIGN KEY. El compilador entiende la sintaxis de FOREIGN KEY, pero solo imprime un aviso e ignora la cl�usula. Las claves ajenas pueden ser parcialmente emuladas por medio de triggers (Consulte la sentencia CREATE TRIGGER). |
[ CONSTRAINT name ] UNIQUE ( column [, ...] ) |
Un nombre arbitrario dado a una restricci�n.
Un nombre de un campo en una tabla.
Este error ocurre en tiempo de ejecuci�n si se intenta insertar un valor duplicado en un campo.
La restricci�n UNIQUE especifica una regla en la que un grupo de uno The UNIQUE constraint specifies a rule that a group of one or o m�s campos diversos de una tabla puede contener solo valores �nicos. El comportamiento de la restricci�n de tabla UNIQUE es el mismo que para la restricci�n de campo, con la posibilidad adicional de aplicarlo a m�s de un campo.
Consulte la secci�n sobre la restricci�n de campo UNIQUE para m�s detalles.
[ CONSTRAINT name ] PRIMARY KEY ( column [, ...] ) |
Un nombre arbitrario para la restricci�n.
Los nombres de uno o m�s campos en la tabla.
Esto ocurre en tiempo de ejecuci�n si alguien intenta insertar un valor duplicado en un campo sujeto a una restricci�n de clave primaria (PRIMARY KEY).
La restricci�n PRIMARY KEY especifica una regla en la que un grupo de uno o m�s campos de una tabla puede contener s�lo valores �nicos (no duplicados) y no nulos. Las definiciones de campo de los campos especificados no necesita incluir una restricci�n NOT NULL para ser inclu�da en una restricci�n PRIMARY KEY.
La restricci�n de tabla PRIMARY KEY es similar a la respectiva restricci�n de campo, con la posibilidad de extenderla with the additional capability of encompassing multiple columns.
Consulte la secci�n sobre la restricci�n de campo PRIMARY KEY para m�s infomaci�n.
Crea las tablas films y distributors:
CREATE TABLE films ( code CHARACTER(5) CONSTRAINT firstkey PRIMARY KEY, title CHARACTER VARYING(40) NOT NULL, did DECIMAL(3) NOT NULL, date_prod DATE, kind CHAR(10), len INTERVAL HOUR TO MINUTE ); |
CREATE TABLE distributors ( did DECIMAL(03) PRIMARY KEY DEFAULT NEXTVAL('serial'), name VARCHAR(40) NOT NULL CHECK (name <> '') ); |
Crea una tabla con un array de 2 dimensiones:
CREATE TABLE array ( vector INT[][] ); |
Define una restricci�n de tabla UNIQUE para la tabla films. Las restricciones de tabla UNIQUE pueden ser definidas sobre uno o m�s campos de la tabla:
CREATE TABLE films ( code CHAR(5), title VARCHAR(40), did DECIMAL(03), date_prod DATE, kind CHAR(10), len INTERVAL HOUR TO MINUTE, CONSTRAINT production UNIQUE(date_prod) ); |
Define una restricci�n de campo CHECK:
CREATE TABLE distributors ( did DECIMAL(3) CHECK (did > 100), name VARCHAR(40) ); |
Define una restricci�n de tabla CHECK:
CREATE TABLE distributors ( did DECIMAL(3), name VARCHAR(40) CONSTRAINT con1 CHECK (did > 100 AND name > '') ); |
Define una restricci�n de tabla PRIMARY KEY para la tabla films. Las restricciones de tabla PRIMARY KEY pueden ser definidas sobre uno o m�s campos de la tabla:
CREATE TABLE films ( code CHAR(05), title VARCHAR(40), did DECIMAL(03), date_prod DATE, kind CHAR(10), len INTERVAL HOUR TO MINUTE, CONSTRAINT code_title PRIMARY KEY(code,title) ); |
Define una restricci�n de campo PRIMARY KEY para la tabla distributors. Las restricciones de campo PRIMARY KEY solamente se pueden definir para un campo de la tabla (los siguientes dos ejemplos ser�an equivalentes) :
CREATE TABLE distributors ( did DECIMAL(03), name CHAR VARYING(40), PRIMARY KEY(did) ); |
CREATE TABLE distributors ( did DECIMAL(03) PRIMARY KEY, name VARCHAR(40) ); |
Adem�s de la tabla temporal visible localmente, SQL92 define una sentencia CREATE GLOBAL TEMPORARY TABLE , y opcionalmente una cl�usula ON COMMIT:
CREATE GLOBAL TEMPORARY TABLE table ( column type [ DEFAULT value ] [ CONSTRAINT column_constraint ] [, ...] ) [ CONSTRAINT table_constraint ] [ ON COMMIT { DELETE | PRESERVE } ROWS ] |
Para tablas temporales, la sentencia CREATE GLOBAL TEMPORARY TABLE nombra una nueva tabla visible a otros clientes y define los campos de la tabla y las restricciones.
La cl�usula opcional ON COMMIT de CREATE TEMPORARY TABLE especifica si la tabla temporal debe vaciarse de registros cada vez que se ejecuta un COMMIT o no. Si se omite la cl�usula ON COMMIT, se asume la opci�n por defecto, ON COMMIT DELETE ROWS.
Para crear una tabla temporal:
CREATE TEMPORARY TABLE actors ( id DECIMAL(03), name VARCHAR(40), CONSTRAINT actor_id CHECK (id < 150) ) ON COMMIT DELETE ROWS; |
SQL92 especifica algunas posibilidades adicionales para UNIQUE:
Definici�n de restricci�n de tabla:
[ CONSTRAINT name ] UNIQUE ( column [, ...] ) [ { INITIALLY DEFERRED | INITIALLY IMMEDIATE } ] [ [ NOT ] DEFERRABLE ] |
Definici�n de restricci�n de campo:
[ CONSTRAINT name ] UNIQUE [ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ] [ [ NOT ] DEFERRABLE ] |
La restricci�n NULL (realmente no es una restricci�n) es una extensi�n Postgres a SQL92 inclu�da por simetr�a con la cl�usula NOT NULL. Como es el valor por defecto para cualquier campo, su presencia es redundante.
[ CONSTRAINT name ] NULL |
SQL92 especifica alguna posibildad adicional para NOT NULL:
[ CONSTRAINT name ] NOT NULL [ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ] [ [ NOT ] DEFERRABLE ] |
SQL92 especifica alguna posibilidad adicional para restricciones, y tambi�n define restricciones de assertions y de dominio.
Postgres todav�a no soporta ni dominios ni assertions. |
Una assertion es un tipo especial de restricci�n de integridad y comparte el mismo espacio de nombres con otras restricciones. Sin embargo, una assertion no es necesariamente dependiente de una particular tabla base como son las restricciones, as� que SQL-92 proporciona la sentencia CREATE ASSERTION como un m�todo alternativo para definir una restricci�n:
CREATE ASSERTION name CHECK ( condition ) |
Las restricciones de dominio se definen con las sentencias CREATE DOMAIN o ALTER DOMAIN:
Restricci�n de dominio:
[ CONSTRAINT name ] CHECK constraint [ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ] [ [ NOT ] DEFERRABLE ] |
Definici�n de restricciones de tabla:
[ CONSTRAINT name ] { PRIMARY KEY ( column, ... ) | FOREIGN KEY constraint | UNIQUE constraint | CHECK constraint } [ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ] [ [ NOT ] DEFERRABLE ] |
Definici�n de restricciones de campo:
[ CONSTRAINT name ] { NOT NULL | PRIMARY KEY | FOREIGN KEY constraint | UNIQUE | CHECK constraint } [ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ] [ [ NOT ] DEFERRABLE ] |
Una definici�n de restricci�n de integridad (CONSTRAINT) puede contener un atributo o cl�usula DEFERRABLE y /o una cl�usula del modo inicial de restricci�n, en cualquier orden.
significa que la restricci�n debe ser comprobada despu�s de la ejecuci�n de cada sentencia SQL.
significa que la verificaci�n del cumplimiento de la restricci�n puede ser aplazado hasta m�s tarde, pero no m�s tarde que el final de la actual transacci�n.
El modo de restricci�n para cada restricci�n tiene siempre un valor incial por defecto que se establece para la restricci�n al principio de la transacci�n.
significa que, desde el principio de la transacci�n, la restricci�n debe ser comprobada despu�s de la ejecuci�n de cada sentencia SQL.
significa que, como se est� al principio de la transacci�n, la comprobaci�n de la restricci�n puede ser aplazada hasta m�s tarde, pero no m�s tarde que en el final de la actual transacci�n. O sea, que la restricci�n puede ser incumplida por alguna sentencia SQL en un punto intermedio de la transacci�n, pero no al final de la misma.
SQL92 especifica alguna capacidad adicional para CHECK tanto en la restricciones de tabla como en la de campo.
definici�n de restricci�n de tabla:
[ CONSTRAINT name ] CHECK ( VALUE condition ) [ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ] [ [ NOT ] DEFERRABLE ] |
definici�n de restricci�n de campo:
[ CONSTRAINT name ] CHECK ( VALUE condition ) [ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ] [ [ NOT ] DEFERRABLE ] |
SQL92 especifica algunas posibilidades adicionales para la PRIMARY KEY:
Definici�n de restricciones de tabla:
[ CONSTRAINT name ] PRIMARY KEY ( column [, ...] ) [ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ] [ [ NOT ] DEFERRABLE ] |
Definici�n de restricciones de campo:
[ CONSTRAINT name ] PRIMARY KEY [ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ] [ [ NOT ] DEFERRABLE ] |