【问题标题】:Can't drop a table in postgres无法在 postgres 中删除表
【发布时间】:2014-01-30 06:11:14
【问题描述】:

我是 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?
  • 你的意思是drop table public.Users;? - 给出了相同的ERROR: table "users" does not exist

标签: postgresql


【解决方案1】:

问题是您的用户表是大小写混合的(并且 Postgres 中的对象名称区分大小写)。如果表名周围没有引号,Postgres 会将提供的名称折叠为“用户”——它不存在。您引用表名的解决方案有效,不是因为 users 是保留名称,而是因为通过引用它,您是在告诉 Postgres 删除“Users”表而不是“users”表。

【讨论】:

    【解决方案2】:

    看来你做得对,但你可以试试这样做:

    DROP TABLE IF EXISTS Users;
    

    或者这个:

    DROP TABLE IF EXISTS Public.Users;
    

    如果存在则删除,如果不存在则知道。

    【讨论】:

    • 表名大小写不一,需要加引号。
    • 我不知道在其他dbms中,但是PostgreSQL你不需要引用表名(刚刚测试过)
    • 如果表名是用引号中的名称混合/大写创建的,则不会。试试create table "Users" as select current_user as username; 看看drop table users; 的效果如何。
    • 好的,不错的贡献。 +1
    猜你喜欢
    • 1970-01-01
    • 2019-06-02
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    • 2014-01-29
    • 2011-09-07
    • 2023-03-03
    • 1970-01-01
    相关资源
    最近更新 更多