无法在Postgres中删除表

15

我是postgresql的新手,但似乎无法删除一个表。

db_dev=# \dt
          List of relations
 Schema |    Name     | Type  | Owner
--------+-------------+-------+-------
 public | DataSources | table | ted
 public | Emails      | table | ted
 public | Users       | table | ted
(3 rows)

当我尝试删除用户表时,它会出现错误:

db_dev=# drop table Users;
ERROR:  table "users" does not exist

我做错了什么?


你尝试过删除 public.users 吗? - imran
你是不是想执行 drop table public.Users; 命令?但是会返回相同的错误提示 ERROR: table "users" does not exist - Ted Tomlinson
2个回答

33

问题是您的Users表使用了混合大小写(并且在Postgres中,对象名称是区分大小写的)。如果在表名周围没有引号,则Postgres将把所提供的名称大小写折叠为“users”--但实际上这个表不存在。您引用表名的解决方案有效,不是因为users是保留字,而是因为通过引用它,您告诉Postgres删除“Users”表而不是“users”表。


6

看起来你做得没错,但是你可以尝试这样做:

DROP TABLE IF EXISTS Users;

或者是这样:
DROP TABLE IF EXISTS Public.Users;

如果存在则会被删除,如果不存在则您将会知道。


1
表名是混合大小写的,您需要加引号。 - gsiems
1
我不知道其他的数据库管理系统,但在PostgreSQL中你不需要引用表名(我刚测试过)。 - carexcer
如果表名是用引号创建的混合/大写形式,那么就不会起作用。尝试使用create table "Users" as select current_user as username;,然后看看drop table users;是否有效。 - gsiems
好的,很棒的贡献。+1 - carexcer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接