我想使用CASCADE将表中使用的序列和表本身放在一个语句中,但是我收到NOTICE并且表没有被删除.例如:
CREATE SEQUENCE seq1;
CREATE TABLE t1 (f1 INT NOT NULL DEFAULT nextval('seq1'));
Run Code Online (Sandbox Code Playgroud)
然后当我这样做时:
DROP SEQUENCE seq1 CASCADE;
Run Code Online (Sandbox Code Playgroud)
我收到以下消息,表格未被删除:
NOTICE: drop cascades to default for table t1 column f1
Run Code Online (Sandbox Code Playgroud)
我肯定做错了,但这些是我在PostgreSQL中的第一步.
Erw*_*ter 41
你对依赖关系有误解.该表永远不是相关序列的依赖对象,并且永远不会被a删除
DROP SEQUENCE ... CASCADE;
Run Code Online (Sandbox Code Playgroud)
只有序列中的DEFAULT值绘制"取决于"序列,如果序列被删除,则设置为NULL CASCADE.
反之亦然:如果序列由表列拥有,则将其删除
DROP TABLE f1 CASCADE;
Run Code Online (Sandbox Code Playgroud)
对于由表列拥有的序列,您可以使用serialMilen已建议的类型.或者您可以更改现有序列:
ALTER SEQUENCE seq1 OWNED BY t1.f1;
Run Code Online (Sandbox Code Playgroud)
您要求删除序列并级联该操作。虽然默认值不能在没有序列的情况下存在,因此会被删除,但表和列可以在没有序列的情况下存在,因此它们会保留。
按照您指定的方式,删除表不会删除序列,尽管您可以使序列取决于使用它的列,因此如果您删除表,它会自动删除。您可以通过更改序列的所有者或使用 SERIAL 来实现此目的。将列声明为 SERIAL 类型会自动创建一个序列,使其生成该列的默认值,并使该列成为该序列的所有者。
| 归档时间: |
|
| 查看次数: |
40936 次 |
| 最近记录: |