第一次用postgresql做个人项目,记录遇到的一个坑。
参考https://www.fujitsu.com/jp/products/software/resources/feature-stories/postgres/article-index/relation-does-not-exist/
使用pgadmin,自己创建user表(默认在public schema),检索时生产的sql文是
SELECT * FROM public."user";
能正常检索。去掉public后,SELECT * FROM user;发现结果不对。
原因是show search_path;输出"
u
s
e
r
"
,
p
u
b
l
i
c
,检索时会按顺序检索这两个
s
c
h
e
m
a
。
S
E
T
s
e
a
r
c
h
p
a
t
h
T
O
p
u
b
l
i
c
;
后
s
h
o
w
s
e
a
r
c
h
p
a
t
h
;依旧输出
"
user", public,检索时会按顺序检索这两个schema。 SET search_path TO public;后show search_path;依旧输出"
user",public,检索时会按顺序检索这两个schema。SETsearchpathTOpublic;后showsearchpath;依旧输出"user", public。
改到cmd里用psql -U postgres(和pgadmin同一个账号)登录,SELECT * FROM public.“user”;却检索不到数据。
原因:
1,cmd里使用了不同的database,使用\c database_name切换db即可。
2,修改search_path后需重启pgadmin才生效。
把自己建的表的表名改成users后,执行SELECT * FROM users,在"$user" schema里找不到,就能从public找到数据。
不改表名,SET search_path TO public重启pgadmin再检索,大概也可以解决(未尝试)。