与search_path有关的创建表异常问题(HGDB)

本文探讨了在HighGo Database (HGDB)中创建数据库对象时遇到的问题,特别是在search_path设置不当导致无法创建表的情况。通过调整search_path的值并明确指定模式,成功解决了创建表时找不到模式的问题。

作者:瀚高PG实验室 (Highgo PG Lab)- 波罗
HGDB创建数据库对象与变量search_path的值有关,当创建对象时,如果未指定模式,这些对象将会在默认的模式下被创建,这个模式叫pubulic。一个例外情况是另一个模式首先出现在search_path。以下问题是在search_path默认值发生变化是抛出的,请参考如下:

su - highgo
psql
highgo=# \c testdb 
PSQL: Release 4.1.1
Connected to:
HighGo Database V4.1 Enterprise Edition Release 4.1.1 - 64-bit Production

You are now connected to database "testdb" as user "user_t".

testdb=# CREATE TABLE  test(id integer not null);
ERROR:  3F000: no schema has been selected to create in
LINE 1: CREATE TABLE  test(id integer not null);
                      ^

创建表出现异常,按照一般理解表会创建到默认的模式public下,结果这里报错了,提示创建表没有模式可选。

testdb=# create schema schema_t;
CREATE SCHEMA
testdb=# \dn
     List of schemas
      Name      | Owner  
----------------+--------
 hgdb_catalog   | highgo
 oracle_catalog | highgo
 public         | highgo
 schema_t       | user_t
(4 rows)

testdb=# CREATE TABLE  test(id integer not null);    --不指定模式创建表对象
CREATE TABLE
testdb=# \d
           List of relations
     Schema     | Name | Type  | Owner  
----------------+------+-------+--------
 oracle_catalog | dual | view  | highgo
 schema_t       | test | table | user_t
(2 rows)

testdb=# \dn
     List of schemas
      Name      | Owner  
----------------+--------
 hgdb_catalog   | highgo
 oracle_catalog | highgo
 public         | highgo
 schema_t       | user_t
(4 rows)

testdb=# select user;
 current_user 
--------------
 user_t
(1 row)

testdb=# show search_path;
 search_path 
-------------
 schema_t
(1 row)

结论:经过以上调试,最终发现是之前的测试中将serch_path的值修改成schema_t,而且在数据库中这个模式被删除了,结果出现创建数据库对象找不到模式的提示信息。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值