Пользователь Postgres не может выбирать из общедоступных таблиц - PullRequest
0 голосов
/ 28 июня 2019

Здравствуйте, у меня есть один пользователь в моей базе postgresql Вывод \ dt для пользователя:

 test=> \dt
                  List of relations
 Schema |           Name           | Type  |  Owner
--------+--------------------------+-------+----------
 public | code                     | table | postgres
 public | code_to_indicator        | table | postgres
 public | indicator                | table | postgres

Как видите, владельцем таблиц является postgres Но если запустить команду \ dt для пользователя postgres, она скажет:

postgres=# \dt
Did not find any relations.

Как это возможно? Также, если я попытаюсь выбрать пользователя postgres, он также потерпит неудачу:

postgres=# select * from indicator;
ERROR:  relation "indicator" does not exist
LINE 1: select * from indicator;

Может кто-нибудь помочь с этим? До сегодняшнего дня все было хорошо, что-то пошло не так, я даже не знаю что. Версия PostgreSQL: 11,4

Ответы [ 2 ]

0 голосов
/ 28 июня 2019

postgres=# в начале приглашения psql означает, что вы подключены к базе данных postgres, которая создается в качестве заполнителя для подключений администратора, и обычно в ней ничего нет.Если вы не укажете базу данных в командной строке, psql ищет базу данных с тем же именем, что и пользователь, поэтому пользователь postgres подключится к ней по умолчанию.

Для подключения квместо базы данных test вы можете либо ввести \c test в приглашение psql, либо запустить ее с помощью psql -d test.

0 голосов
/ 28 июня 2019

Возможность просмотра таблиц в public или в любой схеме, когда имя таблицы не определено, зависит от настройки search_path.

Если вы не изменили search_path на постоянной основе,введите RESET search_path; в свою сессию и попробуйте снова.

Как search_path изменяется, если не вы сами?Воспроизведение файла SQL, полученного с помощью pg_dump, приводит к удалению public из пути поиска, что во многом похоже на то, что, по-видимому, показывает этот вопрос.

Если он постоянно изменяется с помощью ALTER USER postgres SET search_path TO ... или для каждой базы данных или для всего миразатем его необходимо отменить эквивалентной командой ALTER.

См. Как search_path влияет на разрешение идентификатора и "текущую схему" или Документация PostgreSQL для получения дополнительной информации..

...