Столбцы 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
Например, если таблица включена в 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);
Решения:
- Возможно, удалите его или измените
false
на true
.
- Создайте частную схему, которая будет использоваться для доступа ко всем таблицам.
Приведенная выше команда просто деактивирует все общедоступные схемы.
Проверьте больше на документации здесь: 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" (
...