Tengo una base de datos postgresql con varias tablas. Si consulto:
SELECT column_name
FROM information_schema.columns
WHERE table_name="my_table";
Obtendré una lista de las columnas devueltas correctamente.
Sin embargo, cuando consulto:
SELECT *
FROM "my_table";
Me sale el error:
(ProgrammingError) relation "my_table" does not exist
'SELECT *\n FROM "my_table"\n' {}
¿Alguna idea sobre por qué puedo obtener las columnas, pero no puedo consultar la tabla? El objetivo es poder consultar la tabla.
sql
postgresql
patkil
fuente
fuente
WHERE table_name="my_table";
no es válido porque hace"my_table"
referencia a un nombre de columna y no existe tal columna eninformation_schema.columns
. Por favor, editar su pregunta y añadir el exactocreate table
sentencia que ha utilizado para crear la tabla.Respuestas:
Tienes que incluir el esquema si no es público
SELECT * FROM <schema>."my_table"
O puede cambiar su esquema predeterminado
SHOW search_path; SET search_path TO my_schema;
Consulte el esquema de su tabla aquí
SELECT * FROM information_schema.columns
Por ejemplo, si una tabla está en el esquema predeterminado,
public
ambos funcionarán bienSELECT * FROM parroquias_region SELECT * FROM public.parroquias_region
Pero los sectores necesitan especificar el esquema
SELECT * FROM map_update.sectores_point
fuente
permission denied
, pero eso al menos ya sé adónde ir.SET search_path TO my_schema;
en el shell de Postgres pero lo exacto no funciona en el código Python? No tengo ningún problema que distinga entre mayúsculas y minúsculas. ¡Estoy seguro!Puedes probar:
SELECT * FROM public."my_table"
No olvide las comillas dobles cerca de my_table.
fuente
Tuve que incluir comillas dobles con el nombre de la tabla.
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".
???
Doble comillas:
db=> \d "COMMONDATA_NWCG_AGENCIES" Table "public.COMMONDATA_NWCG_AGENCIES" Column | Type | Collation | Nullable | Default --------------------------+-----------------------------+-----------+----------+--------- ID | integer | | not null | ...
Muchas comillas dobles:
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)
Esto es postgres 11. Las declaraciones CREATE TABLE de este volcado también tenían comillas dobles:
DROP TABLE IF EXISTS "COMMONDATA_NWCG_AGENCIES"; CREATE TABLE "COMMONDATA_NWCG_AGENCIES" ( ...
fuente
Tuve el mismo problema que ocurrió después de restaurar los datos de una base de datos descargada de Postgres.
Mi archivo de volcado tenía el comando a continuación desde donde las cosas comenzaron a ir hacia el sur.
SELECT pg_catalog.set_config('search_path', '', false);
Soluciones:
false
para que seatrue
.El comando anterior simplemente desactiva todos los esquemas de acceso público.
Consulte más sobre la documentación aquí: https://www.postgresql.org/docs/9.3/ecpg-connect.html
fuente
El error puede deberse a restricciones de acceso. Solución:
GRANT ALL PRIVILEGES ON DATABASE my_database TO my_user;
fuente
Estaba usando pgAdmin para crear mis tablas y, aunque no estaba usando palabras reservadas, la tabla generada tenía una cita en el nombre y un par de columnas tenían comillas. Aquí hay un ejemplo del SQL generado.
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;
Todas estas citas se insertaron "al azar". Solo necesitaba soltar y volver a crear la tabla sin las comillas.
Probado en pgAdmin 4.26
fuente
En mi caso, el archivo de volcado que restauré tenía estos comandos.
CREATE SCHEMA employees; SET search_path = employees, pg_catalog;
Los he comentado y los he restaurado de nuevo. El problema se resolvió
fuente
Encontré este error y resultó que mi cadena de conexión apuntaba a otra base de datos, obviamente la tabla no existía allí.
Pasé algunas horas en esto y nadie más ha mencionado que vuelva a verificar su cadena de conexión .
fuente