错误关系不存在

问题描述 投票:0回答:8

我的节点应用程序收到

[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);
    });
});
node.js postgresql node-postgres
8个回答
5
投票

不知道大家有没有遇到和我一样的情况。

请确保您在正确的数据库主机上使用正确的用户/密码。

我发现我连接到了错误的数据库:(


3
投票

client.query('INSERT...')
调用之前,运行以下命令以确保您的关系可以在当前连接上访问:

client.query('SELECT * FROM pg_catalog.pg_tables', function(err, result) {
  console.log(result);
});

如果您在结果之间看不到

causes
关系,则该关系不存在,或者是在不同用户下创建的。


1
投票

这可能是案件折叠问题。请参阅此答案有关 SQL 语法的 PostgreSQL 文档

编辑后:看起来这不是案例折叠问题。检查

search_path
SHOW search_path
SELECT current_setting('search_path')
)并将其与表所在的架构 (
\dt+ tablename
) 进行比较,以确保表位于客户端的路径上。

还要确保您连接到同一个数据库。


1
投票

我也有同样的问题。我正在查询新创建的表

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();
});

1
投票

如果您使用 Postgres URL 进行连接,请在其中明确指定数据库。有时,如果您不这样做,无论您使用什么库,都会默认将您的用户名作为数据库,这可能是错误的。我刚刚就遇到过这种事。请参阅PostgreSQL 连接 URL


0
投票

我解决了我的问题,但在表名称之前设置了我的架构名称:

SELECT * FROM public.mytable

而不是

SELECT * FROM mytable

0
投票

确保两件事

  • public
    关键字
  • 引用
    "

不是:

SELECT * FROM public.SampleTable
SELECT * FROM SampleTable

应该:

SELECT * FROM public."SampleTable"

-1
投票

在尝试使用用户输入的表名称创建表然后插入数据库时,我遇到了类似的错误。

我找到的解决方案是创建创建表并将其作为两个单独的函数插入,连续调用这些函数,但第二个函数有延迟。

指导代码如下:

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
© www.soinside.com 2019 - 2024. All rights reserved.