Невозможно просмотреть какие-либо отношения внутри созданной схемы - PullRequest
1 голос
/ 07 августа 2020

Я запустил контейнер postgres. Он создает схемы и таблицы с помощью файла. sql, помещенного в папку docker -entrypoint. Моя схема указана в \ dn +. Но \ dt не дает отношения. Права доступа остаются неизменными.

Выполнение \ dn + дает:

 List of schemas:

  Name  |  Owner   |  Access privileges   |      Description
--------+----------+----------------------+------------------------
 MYAPP    | postgres |                      |
 public | postgres | postgres=UC/postgres+| standard public schema
        |          | =UC/postgres         |

Выполнение \ dt дает: (внутри схемы publi c)

 Did not find any relations.

Однако мой. sql файл может создавать таблицы внутри схемы publi c внутри той же БД. И \ dt показывает список таблиц правильно.

Почему я не могу создавать таблицы внутри схемы c, отличной от publi. Какие-либо ограничения привилегий?

sql содержимое ниже:

CREATE SCHEMA "MYAPP";

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA MYAPP TO postgres;

CREATE TABLE "MYAPP"."ACCESS_MASTER" ("ACCESS_ID" character varying COLLATE pg_catalog."default" NOT NULL,"ROLE_ID" character varying COLLATE pg_catalog."default");

Что здесь не так? Пожалуйста, помогите.

Изменить:

IMCDB = # \ dn

 List of schemas
  Name  |  Owner
--------+----------
 MYAPP   | postgres
 public | postgres
(2 rows)

MYAPP=# \dt
Did not find any relations.

IMCDB=# set search_path="MYAPP";
SET

MYAPP=# \dt
Did not find any relations.

MYAPP=# show search_path;
 search_path
-------------
 "MYAPP"
(1 row)

MYAPP=# \dt
Did not find any relations.
MYAPP=#

Установка пути к моей схеме тоже не помогла.

1 Ответ

2 голосов
/ 07 августа 2020

\ dt будет перечислять только отношения, которые присутствуют в вашей схеме по умолчанию, которая в вашем случае - publi c.

Вам нужно УСТАНОВИТЬ search_path для MYAPP, после этого он перечислит все отношения, присутствующие в схема MYAPP.

postgres=# show search_path;
LOG:  statement: show search_path;
   search_path   
-----------------
 "$user", public
(1 row)


postgres=# set search_path="MYAPP";
SET

postgres=# show search_path;

 search_path 
-------------
 "MYAPP"
(1 row)

Раскрытие информации: я работаю для EnterpriseDB (EDB)

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