我的节点应用程序收到
[error: relation "causes" does not exist]
错误。这种关系确实存在,我不确定问题是什么。
我用
创建了表格CREATE TABLE causes (
cause_id bigint NOT NULL default nextval('causes_cause_id_seq'::regclass),
cause_name varchar(40) NOT NULL,
goal integer,
sponsor varchar(30),
organization varchar(30),
submitter varchar(30),
address varchar(34),
balance numeric
);
这是给出错误的查询:
client = pg.connect(connectionString, function(err, client, done){
if(err) console.log(err);
client.query('INSERT INTO causes (cause_name, goal, organization, sponsor, submitter) VALUES ($1,$2,$3,$4,$5) RETURNING *', r, function(err, result){
if(err) console.log(err);
});
});
不知道大家有没有遇到和我一样的情况。
请确保您在正确的数据库主机上使用正确的用户/密码。
我发现我连接到了错误的数据库:(
在
client.query('INSERT...')
调用之前,运行以下命令以确保您的关系可以在当前连接上访问:
client.query('SELECT * FROM pg_catalog.pg_tables', function(err, result) {
console.log(result);
});
如果您在结果之间看不到
causes
关系,则该关系不存在,或者是在不同用户下创建的。
这可能是案件折叠问题。请参阅此答案和有关 SQL 语法的 PostgreSQL 文档。
编辑后:看起来这不是案例折叠问题。检查
search_path
(SHOW search_path
或 SELECT current_setting('search_path')
)并将其与表所在的架构 (\dt+ tablename
) 进行比较,以确保表位于客户端的路径上。
还要确保您连接到同一个数据库。
我也有同样的问题。我正在查询新创建的表
Example
。这是我的代码:
const { Pool, Client } = require('pg');
const dbClient = new Client({
user: 'postgres',
host: 'localhost',
database: 'postgres',
password: 'test',
port: 5432,
});
dbClient.connect();
dbClient.query('SELECT * from Example', (err, res) => {
console.log(err, res);
dbClient.end();
});
我仔细检查了连接参数和任何可能的拼写错误。原来在
pg
中需要将表名用引号括起来:
dbClient.query('SELECT * from "Example"', (err, res) => {
console.log(err, res);
dbClient.end();
});
如果您使用 Postgres URL 进行连接,请在其中明确指定数据库。有时,如果您不这样做,无论您使用什么库,都会默认将您的用户名作为数据库,这可能是错误的。我刚刚就遇到过这种事。请参阅PostgreSQL 连接 URL
我解决了我的问题,但在表名称之前设置了我的架构名称:
SELECT * FROM public.mytable
而不是
SELECT * FROM mytable
确保两件事
public
关键字"
不是:
SELECT * FROM public.SampleTable
SELECT * FROM SampleTable
应该:
SELECT * FROM public."SampleTable"
在尝试使用用户输入的表名称创建表然后插入数据库时,我遇到了类似的错误。
我找到的解决方案是创建创建表并将其作为两个单独的函数插入,连续调用这些函数,但第二个函数有延迟。
指导代码如下:
function createTable(){
// your create table query here
}
function pushData(){
// your insert into table query here
}
createTable()
setTimeout(postTable, 3000); // for 3 seconds, can make is less, I used 3 secs to be safe