postgresql - Drop schema表示架构不存在

时间:2018-05-22 09:10:49

标签: postgresql database-design schema

我想删除用户,但收到此消息。

postgres=# drop user user1;
ERROR:  role "user1" cannot be dropped because some objects depend on it
DETAIL:  owner of schema schema1
postgres=# 

所以,我尝试删除架构并收到此消息:

postgres=# drop schema schema1 cascade;
ERROR:  schema "schema1" does not exist

但是,架构存在!

postgres=# \dn
     List of schemas
     Name      |  Owner   
---------------+----------
 schema1       | user1
 public        | postgres
(2 rows)

1 个答案:

答案 0 :(得分:0)

假设您在同一个数据库中执行这两个命令,最可能的解释是“schema1”未被调用,您认为它是什么。在它之后会有一个空格。

尝试以下内容,看看是否有奇怪的东西。

SELECT ':' || nspname || ':' FROM pg_namespace;

编辑:更正了海报的信息

  

您的查询结果未显示与原始名称不同的内容。我以大写形式创建了模式名称,并在\ dn

的输出中以大写形式显示

但那不是你展示的,不是吗?

postgres=# \dn List of schemas Name | Owner
---------------+---------- schema1 | user1 public | postgres (2 rows)

所以 - 如果它实际上是大写的,那意味着你通过在创建时双引它来强制它为大写。

PostgreSQL通常会将标识符折叠为小写(SQL标识符通常应该不区分大小写)

因此,如果您在创建时将其强制为大写,则需要强制使用大写字母来删除它。

DROP SCHEMA "SCHEMA1" CASCADE;