错误关系不存在

时间:2013-11-12 23:13:39

标签: node.js postgresql node-postgres

我的节点应用程序出现[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);
    });
});

6 个答案:

答案 0 :(得分:1)

这可能是折叠问题。请参阅this answerthe PostgreSQL documentation on SQL syntax

修改后:看起来不是案例折叠问题。检查search_pathSHOW search_pathSELECT current_setting('search_path'))并将其与表格所在的架构(\dt+ tablename)进行比较,以确保该表位于客户端的路径上。

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

答案 1 :(得分:1)

client.query('INSERT...')电话会议之前,请运行以下内容以确保您的关系可以在当前连接上访问:

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

如果您在结果中未看到causes关系,则表明该关系不存在,或者该关系是在其他用户下创建的。

答案 2 :(得分:1)

我不确定你们中是否有人像我一样面临类似的情况。

请确保您对正确的数据库主机使用了正确的用户名/密码。

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

答案 3 :(得分:0)

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

我发现的解决方案是创建create table并将其作为两个单独的函数插入,将这些函数背对背调用,但是第二个函数会有延迟。

指导代码如下:

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

答案 4 :(得分:0)

我有同样的问题。我正在查询新创建的表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();
});

答案 5 :(得分:0)

如果要使用Postgres URL连接,请在其中明确指定数据库。有时,如果您不这样做,则无论您使用什么库,都默认使用用户名作为数据库,这可能是错误的。我只是发生在我身上。参见PostgreSQL Connection URL