postgresql - удаление схемы говорит, что схема не существует - PullRequest
0 голосов
/ 22 мая 2018

Я хочу удалить пользователя и получаю это сообщение.

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 голосов
/ 22 мая 2018

Предполагая, что вы выполняете обе команды в одной и той же базе данных, наиболее вероятным объяснением является то, что "schema1" не называется тем, чем вы думаете.После него будет пробел или еще что-то подобное.

Попробуйте что-то вроде следующего, чтобы увидеть, есть ли там что-то странное.

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

РЕДАКТИРОВАТЬ: исправленная информацияfrom poster

Результаты вашего запроса не показали ничего, кроме исходного имени.Я создал имя схемы в верхнем регистре и отображается в верхнем регистре при выводе \ dn

Но это не то, что вы показали, не так ли?

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

Итак - если это на самом деле верхний регистр, это означает, что вы принудительно вводите его в верхний регистр, заключая его в двойные кавычки при создании.

PostgreSQL обычно сворачивает идентификаторы в нижний регистр (обычно предполагается, что идентификаторы SQLбыть нечувствительным к регистру)

Так что, если при создании вы принудительно вводите его в верхний регистр, вы должны принудительно сбросить его и в верхнем регистре.

DROP SCHEMA "SCHEMA1" CASCADE;

...