Postgres: ошибка связи не существует, когда таблица существует в общедоступной схеме - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть таблица, которая была выгружена в Postgres с помощью Pandas, и Pandas может читать ее отлично, используя команду read_sql_table, но я не могу получить к ней доступ с помощью SQL.Когда я запускаю команду \dt, я получаю таблицу, указанную в общедоступной схеме, как одну из существующих таблиц.

                 List of relations
 Schema |                Name                | Type  |  Owner   
--------+------------------------------------+-------+----------
 public | "e7b6a2e19789418e9e48fd34e981b036" | table | postgres

Но когда я запускаю SELECT * FROM "e7b6a2e19789418e9e48fd34e981b036";, я получаю сообщение об ошибке «связь не существует».Я пробовал следующее:

  • SELECT * FROM "e7b6a2e19789418e9e48fd34e981b036"
  • SELECT * FROM "public"."e7b6a2e19789418e9e48fd34e981b036"
  • Предоставил пользователю доступ к публичной схеме, выполнив GRANT USAGE ON SCHEMA public TO postgres;
  • Проверено это ответ переполнения стека , который предполагает, что длина идентификатора может быть слишком большой, но длина моего идентификатора составляет 32 байта, а Postgres по умолчанию допускает до 63 байтов

КогдаЯ запускаю SHOW search_path;, он показывает "$user", public, что и должно быть, но по какой-то причине Постгрес продолжает говорить, что связь не существует.

Другая полезная информация:

  • I 'я запускаю Postgres в док-контейнере с здесь

Есть идеи, что может быть причиной ошибки здесь?

1 Ответ

0 голосов
/ 20 ноября 2018

Ваше имя таблицы содержит двойные кавычки.

Встраивание двойных кавычек в идентификатор следует тем же правилам, что и встраивание одинарных кавычек в строковый литерал: вам нужно их удвоить:

Таким образом, таблица была создана примерно так:

create table """e7b6a2e19789418e9e48fd34e981b036"""(...);

Вам нужно использовать тот же синтаксис, когда вы выбираете из него:

SELECT * 
FROM """e7b6a2e19789418e9e48fd34e981b036""";
...