【问题标题】:PosgreSQL - ERROR: relation "table_name" does not exist. How to query without schema name?PostgreSQL - 错误:关系“table_name”不存在。如何在没有模式名称的情况下进行查询?
【发布时间】:2018-11-08 21:50:27
【问题描述】:

我正在从 oracle 迁移到 postgreSQL。 在我的应用程序中,我有很多这样的查询

ResultSet resultSet = statement.executeQuery("SELECT NAME FROM Table_name");

但我失败了,但有例外

错误:关系“table_name”不存在。

据我了解,我还需要提供架构名称,当我这样执行时,它可以工作:

ResultSet resultSet = statement.executeQuery("SELECT NAME FROM schema_name.Table_name");

所以基本上我的问题是 - 我怎样才能避免重构所有查询?

【问题讨论】:

  • 也许该表被创建为“Table_name”,而不是:table_name? (双引号时,大小写很重要!)
  • 不,表名正确
  • 调整你的schema search path

标签: sql database postgresql database-migration


【解决方案1】:

您希望将 Postgres 中的表放入 public 架构(默认)或使用搜索路径。

documentation 解释了这一点。

【讨论】:

    【解决方案2】:

    searchpath 定义要搜索非限定名称的模式的顺序和列表。默认情况下是"$user", public,所以首先是用户模式,然后是public

    您可以通过以下方式更改此订单:

    SET search_path TO schema_name,public;
    

    更多详情请联系here

    例如,您可以在连接打开后进行配置。

    或者,您可以为用户设置一次:

    ALTER ROLE username SET search_path = schema_name,public;
    

    【讨论】:

      【解决方案3】:

      如前所述,此命令将设置当前会话的搜索路径

      SET search_path TO schema_name,public;
      

      但是,如果需要为所有会话执行此操作,只需更正配置文件 - pgsql/11/data/postgresql.conf 添加搜索路径

      search_path = '"$user", YOUR_SCHEMA'
      

      重启数据库。

      【讨论】:

        猜你喜欢
        • 2011-01-03
        • 2012-01-13
        • 2020-09-03
        • 2020-04-15
        • 1970-01-01
        • 1970-01-01
        • 2016-01-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多