PostgreSQL的\d命令不显示表

来源:这里教程网 时间:2026-03-14 20:16:59 作者:
问题描述:
使用ADAM从oracle迁移表结构到polardb_o后,登录polardb调用\d不显示任何表,但查询pg_tables发现表已经存在。
itksdb=# \d
Did not find any relations.
itksdb=# select count(*) from pg_tables;
 count 
-------
   274
查询官方文档得知:
pg有一个schema search path的东西。
系统将沿着一条search path来决定该名称指的是哪个表。search path中第一个匹配的表将被认为是所需要的。如果在搜索路径中没有任何匹配,即使在数据库的其他schema中存在匹配的表名也将会报错。
search path中的第一个schema被称为current schema。除了是第一个被搜索的schema外,如果CREATE TABLE命令没有指定schema,它将是新创建表所在的schema。
itksdb=# show search_path;
   search_path
-----------------
 "$user", public
--第一个元素说明一个和当前用户同名的schema会被搜索。如果不存在这个schema,该项将被忽略。第二个元素指向public schema。

ADAM根据oracle的schema在polardb创建了一个同名的schema。表默认建到了c##itokadmin这个schema下,故当我用itokadmin用户登录数据库时调用\d命令不显示任何表。

解决方法:

将这个schema添加到search path中。
--临时生效
itksdb=# set search_path="$user",public,c##itksadmin;
SET
--永久生效
ALTER ROLE itokadmin in database itksdb set search_path to "$user", public,c##itksadmin;

相关推荐