2012-04-03 10 views
13

Me gustaría soltar la secuencia utilizada en la tabla y la tabla en una declaración usando CASCADE, pero obtengo AVISO y la tabla no se descarta. Por ejemplo:Caída de secuencia y cascada

CREATE SEQUENCE seq1; 
CREATE TABLE t1 (f1 INT NOT NULL DEFAULT nextval('seq1')); 

Y luego cuando lo haga:

DROP SEQUENCE seq1 CASCADE; 

consigo siguiente mensaje, y la mesa no se deja caer:

NOTICE: drop cascades to default for table t1 column f1 

definitivamente estoy haciendo algo mal, pero estos son mis primeros pasos en PostgreSQL.

Respuesta

27

Tiene una idea errónea sobre las dependencias. La mesa nunca es un objeto en función de una secuencia asociada y es Nunca caído por un

DROP SEQUENCE ... CASCADE; 

Sólo un valor por defecto de dibujo de la secuencia de "depende" de la secuencia y se establece en NULL si se elimina la secuencia con CASCADE.

Está al revés: si la secuencia es propiedad de una columna de la tabla se deja caer con un

DROP TABLE f1 CASCADE; 

Para una secuencia a ser propiedad de una columna de la tabla se puede utilizar el tipo serial como Milen ya sugirió. O puede ALTER an existing sequence:

ALTER SEQUENCE seq1 OWNED BY t1.f1; 
3

No sé por qué está creando una secuencia manualmente, tal vez tenga justificación, o tal vez se deba a hábitos que trabajan con otro DBMS.

Pero si no tiene una necesidad especial, utilice el pseudo tipo SERIAL y cuando suelte la tabla, la (s) secuencia (s) detrás de la (s) columna (s) SERIAL también se eliminarán.

+0

Inicialmente pensé que no puedo inicializar la secuencia que utiliza la macro SERIAL , pero ahora pensé que crea una secuencia regular que podría inicializar normalmente. Cambiando a SERIAL, gracias. –

3

Ha solicitado que se elimine la secuencia y realice esa acción en cascada. Mientras que predeterminado no puede existir sin la secuencia, y por lo tanto se descarta, la tabla y la columna pueden existir sin la secuencia, por lo que permanecen.

Con la forma en que ha especificado esto, soltar la tabla no soltará la secuencia, aunque puede hacer que la secuencia dependa de la columna con la que se utiliza, y por lo tanto caer automáticamente si suelta el tabla. Puedes hacer esto alterando el propietario de la secuencia, o usar SERIAL en su lugar. Si se declara que una columna es de tipo SERIAL, se crea automáticamente una secuencia, se genera un valor predeterminado para la columna y se convierte en esa columna el propietario de la secuencia.

0

caída en cascada tabla nombre_tabla; también puede usar esto ... y también le recomendaré que use una serie con clave principal para que pueda identificar una columna de forma exclusiva ...

Cuestiones relacionadas