我有一张桌子foo
。为了快速升级/部署网站,我做了一个新表,其中tmp_foo
包含一些新数据,方法是:
create table tmp_foo (like foo including constraints including defaults including indexes);
现在每个表都有一个PKid
列,看起来像:
Column | Type | Modifiers
-------------+-----------------------+--------------------------------------------------------------------------
id | integer | not null default nextval('foo_id_seq'::regclass)
重要的一点是,两个表都依赖于完全相同的序列foo_id_seq
。没有tmp_foo_id_seq
。就我的目的而言,这似乎还可以。
此后,我加载tmp_foo
了新数据并重命名了表,以便tmp_foo
将其作为实盘接管foo
,而原始表foo
变成了foo_old
。现在我尝试删除foo_old
:
db=> drop table foo_old ;
ERROR: cannot drop table foo_old because other objects depend on it
DETAIL: default for table foo_old column id depends on sequence foo_id_seq
足够公平,id
列默认值仍取决于顺序。
db=> alter table foo_old alter column id drop default;
这是踢脚线。
db=> drop table foo_old ;
ERROR: cannot drop table foo_old because other objects depend on it
DETAIL: default for table foo column id depends on sequence foo_id_seq
因此,foo_old
不再对序列具有任何可见的依赖关系,但是它仍然尝试将序列与表一起删除(显然不会,因为新表依赖该表)。
因此,问题分为两部分:
(在PostgreSQL 8.4上)
试试这个:
ALTER SEQUENCE foo_id_seq OWNED BY NONE
那么您应该可以放下桌子。
要检索序列的“所有者”,请使用以下查询
SELECT s.relname as sequence_name,
n.nspname as sequence_schema,
t.relname as related_table,
a.attname as related_column
FROM pg_class s, pg_depend d, pg_class t, pg_attribute a, pg_namespace n
WHERE s.relkind = 'S'
AND n.oid = s.relnamespace
AND d.objid = s.oid
AND d.refobjid = t.oid
AND (d.refobjid, d.refobjsubid) = (a.attrelid, a.attnum)
PostgreSQL 使用 DROP TABLE 语句来删除表格,包含表格数据、规则、触发器等,所以删除表格要慎重,删除后所有信息就消失了。 语法 DROP TABLE 语法格式如下: 实例 上一章节中我们创建了 COMPANY 和 DEPARTMENT 两个表格,我们可以先使用 \d 命令来查看表格是否创建成功: 从以上结果可以看出,我们表格已经创建成功,接下来我们删除这两个表格: 再使用 \d
要删除表的列,请在ALTER table语句中使用drop column子句,如下所示: 错误:“rs”行或其附近出现语法错误1:ALTER TABLE res_partner rs
本文向大家介绍postgresql 实现多表关联删除,包括了postgresql 实现多表关联删除的使用技巧和注意事项,需要的朋友参考一下 t_aj_ajjbxx t_aj_ajfbxx t_xt_dwxx 两表关联,删除一张表中数据 只有t_aj_ajfbxx 表中数据被删除 三表关联,删除一张表中数据 只有t_aj_ajjbxx 表中数据被删除 补充:PostgreSQL的级联删除(主键删除则
我是Postgresql的新手,不知道如何管理分区表 我有基于日期的分区表。在插入数据之前,触发器检查日期并将其放入相应的子表中 例如 2014年11月15日-插入名为11-15-2014_log的表格 2014年11月16日-插入名为11-16-2014_log的表格 现在我想创建一个函数来删除旧的子表,例如,超过90天的表。我应该根据表名查找并删除子表(因为它包含创建日期),还是应该在主表中查
我有以下型号: 当我运行下面的查询时,用户模型也被删除 有没有办法在不删除用户的情况下删除问题? 我试着重复这些问题但没有用 我认为查询集是懒惰的,所以也许我需要在删除之前评估它,所以我打印了它,但这不起作用。 我知道,将ForeignKey设置为null将为我提供诸如clear和remove之类的方法,但我不想这样做,因为我不希望出现任何孤立的用户问题。 我更新了ForeignKey,如下所示
如何在不删除索引映射的情况下从elasticsearch数据库中删除数据? 我是Tire gem,使用删除命令删除我所有的映射并再次运行创建命令。我想避免创建命令一次又一次地运行。 请帮我解决这个问题。