解决psql postgresql中no schema has been selected to create in以及relation “XXX“ does not exist

在尝试运行.sql文件时遇到错误,提示没有选择schema创建表。问题源于.sql文件中的search_path被更改。通过检查代码,发现设置了search_path变量。解决方案包括创建指定的schema以及修改用户设置,将search_path添加到用户配置中,从而修复问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题

在运行别人的.sql文件时发生如下报错

\i ./load_table.sql

psql:/home/load_table.sql:26: ERROR:  no schema has been selected to create in
LINE 1: create table XXX
                     ^
psql:/home/load_table.sql:27: ERROR:  relation "XXX" does not exist

解决问题

思路

Google了很久都没有解决问题,非常奇怪。然后有一次发现:才进入psql命令行的时候\dt命令能够正常运行

\dt

        List of relations
 Schema | Name | Type  |  Owner   
--------+------+-------+----------
 public | XXX  | table | postgres
(1 row)

但是只要运行了.sql文件过后,运行\dt命令就会报错

\dt
Did not find any relations.

非常奇怪,所以怀疑是别人的.sql文件有问题。然后仔细阅读代码,发现代码中第一行就会设置search_path

set search_path = the_search_path2be_set;

解决方法

知道是search_path被更改就好办了
psql命令行执行:

CREATE SCHEMA the_search_path2be_set;

为用户添加search_path

ALTER USER user_name SET search_path to "$user", public, the_search_path2be_set;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值