无法从临时表中删除?

Posted

技术标签:

【中文标题】无法从临时表中删除?【英文标题】:Unable to delete from a temp table? 【发布时间】:2018-03-13 13:24:52 【问题描述】:

我一直遇到无法从临时表中删除数据的问题。但是,当我搜索错误消息时,我似乎无法在 Google 上找到相关匹配。我试图设置 REPLICA IDENTITY DEFAULT 和 NOTHING

CREATE TEMP TABLE name (LIKE schema.original);

错误:无法从表“名称”中删除,因为它没有 副本身份和发布删除提示:启用从 表,使用 ALTER TABLE 设置 REPLICA IDENTITY。

我正在尝试遵循 ETL 示例,因此我的查询看起来与此链接上的查询非常相似(表名和列不同):

https://github.com/gtoonstra/etl-with-airflow/blob/master/examples/etl-example/sql/process_customer_dimension.sql

我的搜索一直显示逻辑复制的命中,但是当我检查我的设置时,我发现它在复制之下。

name,setting
wal_level,replica

【问题讨论】:

【参考方案1】:

您可以尝试将标识设置为完整,将使用整行作为标识符ALTER TABLE name REPLICA IDENTITY FULL;

或者如果它有唯一索引 ALTER TABLE name USING INDEX index_name;

默认情况下它会使用主键,我想应该没有。

顺便说一句,您为什么要发布临时表? 我认为您应该删除它,因为我认为复制 temp 表没有意义。找到您的酒吧名称 SELECT * FROM pg_publication; 并从中删除临时表:ALTER PUBLICATION name DROP TABLE [ ONLY ] table_name [ * ] [, ...]

【讨论】:

我开始回复你说我没有出版物,但是当我从 pg_publication 中选择 * 时,果然有一个。我目前没有设置复制,但我在 PG10 首次发布时进行了实验。我以为我停止了它。让我再试一次。 删除出版物解决了我的问题。我一定是无意中无缘无故地运行了几个月的出版物。我想知道它是否一直在影响性能。谢谢! 在发布中删除表时订阅会发生什么?

以上是关于无法从临时表中删除?的主要内容,如果未能解决你的问题,请参考以下文章

无法从 plpgsql 函数中的动态命名临时表运行“选择进入”

Db2 事务日志已锁定,无法归档

如何在截断并保留 ID 列值后从临时表中重新插入记录

查询删除临时表中的重复行

Postgres 从动态 sql 字符串创建本地临时表(在提交删除时)

如何从一个表中删除与另一表匹配的行?