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

时间:2017-07-15 22:38:09

标签: node.js postgresql pg-promise

我正在使用PostgreSQL 9.4在节点7.2.1上使用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帖子:

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

但那篇文章对我没有意义,因为我相信pg-promise的作者维塔利告诉海报他没有一个名为用户表 >,当我看到海报试图访问名为用户数据库时,他肯定有一个具有该名称的数据库。

在任何情况下,我肯定都有一个名为 db_stats 的数据库,所以我不确定为什么会收到此错误。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

  

错误:关系" db_stats"不存在

从PostgreSQL获得的错误不是指名为"db_stats"数据库,而是指 relation table >或视图)具有该名称。

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

数据库中既没有DELETE表也没有视图。或者,它可能存在,但它存在于当前search_path的一部分的模式中。

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

db_stats

如果那里有一个表...你已经知道哪个架构包含它/它们。 然后,通过以下方式确保此架构是SELECT * FROM information_schema.tables WHERE table_name = 'db_stats' ; 的一部分:

search_path

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