使用PgAdmin4操作PostgreSQL时,新建表存入public schema而非自定义schema求助
解决PostgreSQL在PgAdmin4中创建表到自定义Schema的问题
我来帮你搞定这个问题!你遇到的情况其实很常见——PgAdmin4界面上选中目标Schema,并不等于当前查询会话的默认Schema已经切换过去了。下面给你几个可行的解决办法:
1. 显式指定Schema创建表
这是最直接且不会出错的方式,在表名前加上你的目标Schema名称,强制将表创建到指定位置:
DROP TABLE IF EXISTS your_target_schema.ClassToTable; CREATE TABLE your_target_schema.ClassToTable ( className varchar(4000), fieldName varchar(4000), tableName varchar(4000) );
把your_target_schema替换成你实际创建的Schema名称即可,这样不管当前会话的默认设置是什么,表都会精准创建到目标Schema中。
2. 修改当前会话的search_path
如果不想每次都写Schema前缀,可以先调整当前查询工具会话的search_path,把自定义Schema放在最前面:
-- 先查看当前的search_path设置 SHOW search_path; -- 将目标Schema设为默认,保留public作为备选 SET search_path TO your_target_schema, public;
执行完这条SET语句后,再运行你的CREATE TABLE语句,表就会默认创建在目标Schema里了。注意这个设置只对当前查询会话有效,关闭查询工具重新打开后会恢复默认值。
3. 设置永久默认search_path(可选)
如果你希望每次连接数据库都默认使用这个自定义Schema,可以修改数据库用户的默认search_path:
ALTER USER your_postgres_user SET search_path TO your_target_schema, public;
把your_postgres_user替换成你的数据库用户名,执行完成后,下次重新连接数据库时,默认的Schema就会自动切换到你指定的那个了。
补充说明
PgAdmin4左侧导航栏选中Schema只是方便你查看该Schema下的对象,但查询工具的会话默认还是沿用数据库或用户的search_path配置,所以必须通过上述方法主动切换默认Schema,或者显式指定Schema才能让表创建到你想要的位置。
内容的提问来源于stack exchange,提问作者ashish chauhan
相关产品推荐
相关产品推荐

