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"
的 数据库 ,而是一个 关系 (table 或 view)具有该名称。
也就是说,db_stats
最有可能出现在 SELECT
查询的 FROM
子句中(尽管它也可能是 INSERT
、UPDATE
, 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 语句,并使用调试器检查该环境中返回的内容。
我在 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"
的 数据库 ,而是一个 关系 (table 或 view)具有该名称。
也就是说,db_stats
最有可能出现在 SELECT
查询的 FROM
子句中(尽管它也可能是 INSERT
、UPDATE
, 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 语句,并使用调试器检查该环境中返回的内容。