我正在从oracle迁移到postgreSQL。在我的应用程序中,我有很多类似的查询
ResultSet resultSet = statement.executeQuery("SELECT NAME FROM Table_name");
但我失败了,除外
错误:关系"table_name"不存在。
据我所知,我还需要提供模式名称,当我这样执行时,它会起作用:
ResultSet resultSet = statement.executeQuery("SELECT NAME FROM schema_name.Table_name");
所以基本上我的问题是——如何避免重构所有查询?
您希望将Postgres中的表放入public
模式(默认模式(或使用搜索路径。
文档对此进行了解释。
searchpath
定义了要搜索非限定名称的模式的顺序和列表。默认情况下,它是"$user", public
,因此首先查找用户模式,然后查找public
您可以通过以下方式更改此订单:
SET search_path TO schema_name,public;
更多详细信息请点击此处。
例如,您可以在连接打开后对此进行配置。
或者,您可以为用户设置一次:
ALTER ROLE username SET search_path = schema_name,public;
如上所述,此命令将为当前会话设置搜索路径
SET search_path TO schema_name,public;
但是,如果需要为所有会话执行此操作,只需更正配置文件-pgsql/11/data/postgresql.conf添加搜索路径
search_path = '"$user", YOUR_SCHEMA'
重新启动数据库。