Pregunta sobre postgresql – Secuencia de caída y cascada

15

Me gustaría eliminar la secuencia utilizada en la tabla y la tabla misma en una declaración utilizando CASCADE, pero recibo AVISO y la tabla no se elimina. Por ejemplo:

<code>CREATE SEQUENCE seq1;
CREATE TABLE t1 (f1 INT NOT NULL DEFAULT nextval('seq1'));
</code>

Y luego cuando hago:

<code>DROP SEQUENCE seq1 CASCADE;
</code>

Recibo el siguiente mensaje, y la tabla no se cae:

<code>NOTICE:  drop cascades to default for table t1 column f1
</code>

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

Tu respuesta

4   la respuesta
3

Pediste que soltaras elsecuencia Y en cascada esa acción. Mientras que ladefecto no puede existir sin la secuencia, y por lo tanto se elimina, la tabla y la columnapuede Existen sin la secuencia, por lo que permanecen.

Con la forma en que ha especificado esto, al descartar la tabla no se eliminará la secuencia, aunque puede hacer que la secuencia dependa de la columna con la que se utiliza y, por lo tanto,eso caer automáticamente si sueltas elmesa. Puede hacerlo modificando el propietario de la secuencia, o use SERIAL en su lugar. Declarar que una columna es de tipo SERIAL crea automáticamente una secuencia, hace que genere un valor predeterminado para la columna y hace que esa columna sea el propietario de la secuencia.

36

Tienes una idea falsa sobre las dependencias. La tabla nunca es un objeto dependiente de una secuencia asociada y esNunca cayó por un

<code>DROP SEQUENCE ... CASCADE;
</code>

Solo un dibujo de valor POR DEFECTO de la secuencia "depende" de la secuencia y se establece en NULL si la secuencia se elimina conCASCADE.

Es al revés: si la secuencia pertenece a una columna de la tabla, se elimina con una

<code>DROP TABLE f1 CASCADE;
</code>

Para que una secuencia sea propiedad de una columna de tabla, puede utilizar laserial Escribe como Milen ya sugirió. O tu puedesALTERAR una secuencia existente:

<code>ALTER SEQUENCE seq1 OWNED BY t1.f1;
</code>
3

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

Pero si no tiene una necesidad especial para ello, use elSERIAL pseudo-tipo y cuando suelte la tabla la secuencia (es) detrás delSERIAL columna (s) se caerán también.

Inicialmente pensé que no podía inicializar la secuencia que usa la macro SERIAL, pero ahora pensé que crea una secuencia regular que podría inicializar normalmente. Cambiando a SERIAL, gracias. Chris Koston
0

drop cascade table table_name; 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 única ...

Preguntas relacionadas