pg-promise 和 postgresql 的关系不存在错误?

Relation does not exist error with pg-promise and postgresql?

我在 Node 7.2.1 和 PostgreSQL 9.4 上使用 pg-promise。我正在使用下面的代码连接到 PostgreSQL 服务器:

// pg-promise connection elements.

// Database initialization options.
const pg_options = {
    // Initialization options.
};

// Create an instance of the pg-promise library.
const g_pg_promise = require('pg-promise')(pg_options);

// Connection string for a local connection to the 'summarize' database.
const g_pg_connection =
{
    host: 'localhost',
    port: 5432,
    database: 'db_stats',
    user: 'db_user',
    password: '{password here}'
}

// Connect to the database.
const g_pg_database = g_pg_promise(g_pg_connection);

// Expose the database object globally.  The database object should only
//  be instantiated once and then shared.
module.exports = {
    g_pg_promise: g_pg_promise,
    g_pg_database: g_pg_database
};

我知道连接参数是有效的,因为我在其他非 Node.JS 应用程序中使用完全相同的值来连接到同一 PostgreSQL 服务器。我也知道 db_stats 是一个有效的数据库名称。我已经使用该数据库与其他非 Node.JS 应用程序和通过 pgAdmin 3.x.

一起工作了很长一段时间

但是,当我尝试使用 pg-promise 进行连接时,出现以下错误:

error: relation "db_stats" does not exist

我确实看到了下面的 SO post:

Unable to query PostgreSQL database in NodeJS using pg-promise - "relation does not exist"

但是 post 对我来说没有意义,因为我相信 pg-promise 的作者 Vitaly 告诉 poster 他没有 table 调用了 users,在我看来 poster 正试图访问 database 打电话给 users,他肯定有一个同名的数据库。

无论如何,我 肯定 有一个名为 db_stats 的数据库,所以我不确定为什么我得到这个错误。我该如何解决?

error: relation "db_stats" does not exist

您从 PostgreSQL 得到的错误不是指一个名为 "db_stats" 数据库 ,而是一个 关系 tableview)具有该名称。

也就是说,db_stats 最有可能出现在 SELECT 查询的 FROM 子句中(尽管它也可能是 INSERTUPDATE , DELETE, ...).

您的数据库中既没有 db_stats table 也没有视图。或者,也许它存在,但它存在于 不是 的架构中 search_path.

要找出答案,请检查两件事:

SELECT
    *
FROM
    information_schema.tables
WHERE
    table_name = 'db_stats' ;

如果那里有 table...您已经知道哪个架构包含 it/them。 然后,通过以下方式确保此架构是您 search_path 的一部分:

SHOW search_path ;

您可能必须通过向您的应用程序添加足够的代码来执行此 SQL 语句,并使用调试器检查该环境中返回的内容。