Столбцы Postgresql существуют, но при обращении к запросу "отношения не существует"

У меня есть postgresql db с несколькими таблицами. Если я запрошу:

SELECT column_name
FROM information_schema.columns
WHERE table_name="my_table";

Я получу список столбцов, возвращаемых должным образом.

Однако, когда я запрашиваю:

SELECT *
FROM "my_table";

Я получаю сообщение об ошибке:

(ProgrammingError) relation "my_table" does not exist
'SELECT *\n    FROM "my_table"\n' {}

Любые мысли о том, почему я могу получить столбцы, но не могу запросить таблицу? Цель состоит в том, чтобы иметь возможность запрашивать таблицу.

Ответы

Ответ 1

Вы должны включить схему, если она не является общедоступной

SELECT *
FROM <schema>."my_table"

Или вы можете изменить схему по умолчанию

SHOW search_path;
SET search_path TO my_schema;

Проверьте схему таблицы здесь.

SELECT *
FROM information_schema.columns

enter image description here

Например, если таблица включена в public схеме, она будет работать нормально

SELECT * FROM parroquias_region
SELECT * FROM public.parroquias_region

Но секторы должны указать схему

SELECT * FROM map_update.sectores_point

Ответ 2

Вы можете попробовать:

SELECT * 
FROM public."my_table"

Не забывайте двойные кавычки рядом с my_table.

Ответ 3

У меня была та же проблема, которая возникла после того, как я восстановил данные из базы данных postgres.

В моем файле дампа была команда, с которой все начиналось на юг.

    SELECT pg_catalog.set_config('search_path', '', false);

Решения:

  1. Возможно, удалите его или измените false на true.
  2. Создайте частную схему, которая будет использоваться для доступа ко всем таблицам.

Приведенная выше команда просто деактивирует все общедоступные схемы.

Проверьте больше на документации здесь: https://www.postgresql.org/docs/9.3/ecpg-connect.html

Ответ 4

Мне пришлось включить двойные кавычки с именем таблицы.

db=> \d
                           List of relations
 Schema |                     Name                      | Type  | Owner 
--------+-----------------------------------------------+-------+-------
 public | COMMONDATA_NWCG_AGENCIES                      | table | dan
 ...

db=> \d COMMONDATA_NWCG_AGENCIES
Did not find any relation named "COMMONDATA_NWCG_AGENCIES".

???

Двойные кавычки:

db=> \d "COMMONDATA_NWCG_AGENCIES"
                         Table "public.COMMONDATA_NWCG_AGENCIES"
          Column          |            Type             | Collation | Nullable | Default 
--------------------------+-----------------------------+-----------+----------+---------
 ID                       | integer                     |           | not null | 
 ...

Много и много двойных кавычек:

db=> select ID from COMMONDATA_NWCG_AGENCIES limit 1;
ERROR:  relation "commondata_nwcg_agencies" does not exist
LINE 1: select ID from COMMONDATA_NWCG_AGENCIES limit 1;
                       ^
db=> select ID from "COMMONDATA_NWCG_AGENCIES" limit 1;
ERROR:  column "id" does not exist
LINE 1: select ID from "COMMONDATA_NWCG_AGENCIES" limit 1;
               ^
db=> select "ID" from "COMMONDATA_NWCG_AGENCIES" limit 1;
 ID 
----
  1
(1 row)

Это postgres 11. Операторы CREATE TABLE из этого дампа также содержат двойные кавычки:

DROP TABLE IF EXISTS "COMMONDATA_NWCG_AGENCIES";

CREATE TABLE "COMMONDATA_NWCG_AGENCIES" (
...