Postgresql 下降顺序和级联

Postgresql 下降顺序和级联,postgresql,Postgresql,我想使用CASCADE在一个语句中删除表中使用的序列和表本身,但我收到通知,表没有被删除。例如: CREATE SEQUENCE seq1; CREATE TABLE t1 (f1 INT NOT NULL DEFAULT nextval('seq1')); 当我这样做的时候: DROP SEQUENCE seq1 CASCADE; 我收到以下消息,并且该表未被删除: NOTICE: drop cascades to default for table t1 column f1 我肯定是

我想使用CASCADE在一个语句中删除表中使用的序列和表本身,但我收到通知,表没有被删除。例如:

CREATE SEQUENCE seq1;
CREATE TABLE t1 (f1 INT NOT NULL DEFAULT nextval('seq1'));
当我这样做的时候:

DROP SEQUENCE seq1 CASCADE;
我收到以下消息,并且该表未被删除:

NOTICE:  drop cascades to default for table t1 column f1

我肯定是做错了什么,但这是我在PostgreSQL中的第一步。

我不知道为什么要手动创建序列-可能是有理由的,也可能是因为习惯使用其他DBMS

但是如果您没有特殊需要,请使用伪类型,当您删除表时,
SERIAL
列后面的序列也将被删除。

您要求删除序列并级联该操作。虽然默认值不能没有序列而存在,因此会被删除,但表和列可以没有序列而存在,因此它们仍然存在


按照您指定的方式,删除表不会删除序列,尽管您可以使序列依赖于使用它的列,因此在删除表时自动删除序列。您可以通过更改序列的所有者来实现这一点,或者改用SERIAL。将列声明为串行类型会自动创建一个序列,使其生成该列的默认值,并使该列成为序列的所有者。

您对依赖项有误解。该表从不作为关联序列的从属对象,并且由

DROP SEQUENCE ... CASCADE;
只有序列中的默认值“取决于”序列,如果使用
级联删除序列,则该值设置为空

反过来说:如果序列属于表列,则使用

DROP TABLE f1 CASCADE;
对于表列所拥有的序列,可以使用Milen已经建议的
serial
类型。或者你可以:


删除级联表\u名称;
你也可以用这个。。。我还建议您使用带有主键的序列号,以便您可以唯一地标识列

我最初认为我不能初始化使用串行宏的序列,但现在我发现它创建了一个可以正常初始化的常规序列。切换到串行,谢谢。
ALTER SEQUENCE seq1 OWNED BY t1.f1;