gpt4 book ai didi

postgresql - Phantom Postgres 表存在但不能删除?

转载 作者:行者123 更新时间:2023-11-29 14:32:33 26 4
gpt4 key购买 nike

我似乎在 Postgres 中有某种幻影表。

假设我执行以下操作:

select * from information_schema.tables where table_schema = 'public';

我得到:

table_name     | table_type | ...
phantom_table BASE TABLE
...

所以,我运行:

drop table phantom_table cascade;

然后我得到:

ERROR: table "phantom_table" does not exist

我尝试过的事情:

  1. 检查拼写错误并确保架构正确(我什至从信息架构查询结果中复制/粘贴了表名)。
  2. 真空
  3. 重新连接。
  4. 从我的用户那里终止其他正在运行的进程(没有其他人在使用数据库)。
  5. 检查表上的事件锁(没有)。

有人对我应该尝试的事情有任何其他想法吗?

最佳答案

名称末尾可能有一些空格。

最简单的方法是让 format() 函数为您生成正确的表名和语句:

select format('drop table %I.%I;', table_schema, table_name) as drop_statement
from information_schema.tables
where table_schema = 'public'
and table_name like '%phantom%';

编辑:似乎 Windows 上的 psql 无法在 drop 语句中处理带有新行的标识符(它但是在创建表格时会执行此操作)。

要解决这个问题,您可以使用 DO block :

do
$$
declare
l_stmt text;
begin
select format('drop table %I.%I;', table_schema, table_name) as drop_statement
into l_stmt
from information_schema.tables
where table_schema = 'public'
and table_name like '%phantom%';
execute l_stmt;
end;
$$
;

请注意,此代码假定只存在一个具有该名称的表。

关于postgresql - Phantom Postgres 表存在但不能删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49493981/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com