第一次用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,检索时会按顺序检索这两个schemaSETsearchpathTOpublic;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再检索,大概也可以解决(未尝试)。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐