我正在使用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 的数据库,所以我不确定为什么会收到此错误。我该如何解决这个问题?
答案 0 :(得分:4)
错误:关系" db_stats"不存在
从PostgreSQL获得的错误不是指名为"db_stats"
的数据库,而是指 relation ( table >或视图)具有该名称。
也就是说,db_stats
最有可能出现在FROM
查询的SELECT
子句中(尽管它也可能是INSERT
,UPDATE
,{ {1}},...)。
数据库中既没有DELETE
表也没有视图。或者,它可能存在,但它存在于不当前search_path
的一部分的模式中。
要找出答案,请检查两件事:
db_stats
如果那里有一个表...你已经知道哪个架构包含它/它们。
然后,通过以下方式确保此架构是SELECT
*
FROM
information_schema.tables
WHERE
table_name = 'db_stats' ;
的一部分:
search_path
您可能必须通过向应用程序添加适当的代码来执行此SQL语句,并使用调试器检查在该环境中返回的内容。