У меня есть база данных postgresql с несколькими таблицами. Если я запрошу:
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' {}
Есть мысли о том, почему я могу получить столбцы, но не могу запросить таблицу? Цель состоит в том, чтобы иметь возможность запрашивать таблицу.
sql
postgresql
Паткил
источник
источник
WHERE table_name="my_table";
является недопустимым, поскольку"my_table"
ссылается на имя столбца, а такого столбца нет вinformation_schema.columns
. Пожалуйста , измените свой вопрос и добавить точноеcreate table
заявление , использованные для создания таблицы.Ответы:
Вы должны включить схему, если она не является общедоступной
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
источник
permission denied
, но, по крайней мере, я знаю, куда идти.SET search_path TO my_schema;
в оболочке postgres все работает, но в коде Python все работает не так ? У меня нет проблем с чувствительностью к регистру. Я уверен!Ты можешь попробовать:
SELECT * FROM public."my_table"
Не забывайте двойные кавычки рядом с my_table.
источник
Пришлось заключить имя таблицы в двойные кавычки.
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" ( ...
источник
У меня была та же проблема, которая возникла после восстановления данных из db, сброшенного postgres.
В моем файле дампа была команда ниже, откуда все пошло на юг.
SELECT pg_catalog.set_config('search_path', '', false);
Решения:
false
чтобы оно былоtrue
.Приведенная выше команда просто деактивирует все общедоступные схемы.
Дополнительную информацию о документации можно найти здесь: https://www.postgresql.org/docs/9.3/ecpg-connect.html
источник
Ошибка может быть вызвана ограничениями доступа. Решение:
GRANT ALL PRIVILEGES ON DATABASE my_database TO my_user;
источник
Я использовал pgAdmin для создания своих таблиц, и хотя я не использовал зарезервированные слова, сгенерированная таблица имела кавычки в имени, а в нескольких столбцах были кавычки. Вот пример сгенерированного SQL.
CREATE TABLE public."Test" ( id serial NOT NULL, data text NOT NULL, updater character varying(50) NOT NULL, "updateDt" time with time zone NOT NULL, CONSTRAINT test_pk PRIMARY KEY (id) ) TABLESPACE pg_default; ALTER TABLE public."Test" OWNER to svc_newnews_app;
Все эти цитаты были вставлены наугад. Мне просто нужно было отбросить и заново создать таблицу без кавычек.
Проверено на pgAdmin 4.26
источник
В моем случае в восстановленном файле дампа были эти команды.
CREATE SCHEMA employees; SET search_path = employees, pg_catalog;
Я прокомментировал их и снова восстановил. Проблема решена
источник
Я столкнулся с этой ошибкой, и оказалось, что моя строка подключения указывала на другую базу данных, очевидно, что таблицы там не было.
Я потратил на это несколько часов, и никто больше не упомянул, чтобы дважды проверить строку подключения .
источник