我有一个带有许多表的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' {}
有关为什么我可以获取列,但无法查询表的任何想法?目标是能够查询表格。
答案 0 :(得分:39)
如果不是公共模式,则必须包含模式
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
答案 1 :(得分:5)
您可以尝试:
SELECT *
FROM public."my_table"
别忘了my_table附近的双引号。
答案 2 :(得分:3)
我必须在表名中加上双引号。
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)
这是postgres11。此转储中的CREATE TABLE语句也带有双引号:
DROP TABLE IF EXISTS "COMMONDATA_NWCG_AGENCIES";
CREATE TABLE "COMMONDATA_NWCG_AGENCIES" (
...
答案 3 :(得分:2)
该错误可能是由访问限制引起的。解决方案:
GRANT ALL PRIVILEGES ON DATABASE my_database TO my_user;
答案 4 :(得分:0)
从postgres转储的数据库恢复数据后,我遇到了同样的问题。
我的转储文件具有以下命令,从那里开始向南移动。
SELECT pg_catalog.set_config('search_path', '', false);
解决方案:
false
更改为true
。上面的命令只是停用了所有可公开访问的模式。
在此处查看有关文档的更多信息:https://www.postgresql.org/docs/9.3/ecpg-connect.html
答案 5 :(得分:0)
我正在使用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上测试
答案 6 :(得分:0)
就我而言,我还原的转储文件具有以下命令。
CREATE SCHEMA employees;
SET search_path = employees, pg_catalog;
我已经评论了这些内容,然后又恢复了。问题已解决
答案 7 :(得分:0)
我遇到此错误,结果证明我的连接字符串指向另一个数据库,显然该表不存在。
我在此上花费了几个小时,没有其他人提到仔细检查您的连接字符串。
答案 8 :(得分:0)
假设我们的数据库名称为“students”,模式名称为“studentinformation”,然后要使用此模式的所有表,我们需要先设置路径,这可以在 postgresql 中进行,例如
client.connect()
.then(()=>console.log("connected succesfully"))
.then(()=>client.query("set search_path to students"))
.then(()=>client.query("show search_path"))
.then(()=>client.query("set search_path to studentinformation"))
.then(()=>client.query("show search_path"))
.then(results => console.table(results.rows)) //setting the search path