postgresql postgres:从node.js调用时,当表明确存在时,关系不存在

syqv5f0l  于 2023-08-04  发布在  PostgreSQL
关注(0)|答案(3)|浏览(166)

所以我psql'd并创建了表用户;

CREATE TABLE users (
    id integer NOT NULL,
    username text
);

字符串
我可以通过执行SELECT * FROM users;来抓取行
然而,当我使用node.js和库模块pg进行调用时,我得到了臭名昭著的关系并不存在。

const createQuery = {text: "INSERT INTO users(id, username) VALUES($1)",values: values}
const { rows } = await db.query(createQuery);


在完成服务器迁移之前,我没有遇到这个问题。

pgx2nnw8

pgx2nnw81#

这种情况可能有两个原因:
1.您已经在不同的模式中创建了此关系。PostgreSQL允许您将关系组织到称为模式的不同名称空间中。要指定架构CREATE TABLE myschema.users (...),类似地,CREATE TABLE myschema.users。如果没有指定模式名,PostgreSQL将使用defualt模式,通常是public。要检查您的关系属于哪个模式,请运行此查询SELECT table_schema, table_name FROM information_schema.tables WHERE table_name = 'users'
1.您可以使用SELECT current_database()SELECT inet_server_addr()查询来检查连接到的数据库和主机,以防连接到错误的数据库/主机。

insrf1ej

insrf1ej2#

最有可能的选择是,该表是在与node.js中使用的默认模式不同的模式中创建的。
您可以通过查询表information_schema.tables来搜索表所属的架构:

select table_schema from information_schema.tables where table_name = 'users';

字符串
有了这些信息,您现在可以在从node.js运行的查询中使用正确的模式名称来限定表名。假设模式名称是myschema,您可以:

INSERT INTO myschema.users(id, username) VALUES($1)

nuypyhwy

nuypyhwy3#

默认情况下,当你不指定任何模式时,postgres会指向公共模式。请使用模式名称/数据库名称沿着表名称。确保在代码中提供了正确的数据库配置。如果配置正确,甚至不需要在查询中提供模式别名。

相关问题