【问题标题】:role does not exist and syntax error for inserting query in NodeJs into postgresql将 NodeJs 中的查询插入 postgresql 的角色不存在和语法错误
【发布时间】:2017-06-17 15:39:32
【问题描述】:

我在 postgres 中创建了一个名为 user 的表,其中包含 id, name, family 列(id 是自动递增的)。我想插入 postgres 的查询如下:

var config = {
    user: 'username',
    database: 'databaseName',
    password: 'password',
    host: 'localhost',
    port: 5432,
    max: 10,
    idleTimeoutMillis: 30000
};

const pool = new postgre.Pool(config);
let query = "INSERT INTO user(name, family) VALUES ('name', 'family')";
pool.query(query, [], function (err, result) {
    if (err) {
        return console.error("error running query", err);
    }
    console.log("done!");        
});

但是,我收到以下错误:

用户附近的语法错误

另外,我尝试了不同的方法来发送请求,如下所示:

const connectionString = "http://localhost:5432/databaseName?username=username&password=password";
const client = new postgre.Client(connectionString);
client.connect();
const query = client.query("INSERT INTO user(id, name, family) VALUES ('name', 'family')");
query.then(x => { console.log("done!")});
query.catch(x => { console.log(x)});

但我收到以下错误:

角色“用户名”不存在

另外,错误正文中的UserName(服务器名称)与数据库的username 不同。

我已经检查了所有可能的谬误,例如用户名和密码的正确性。

所以,问题是什么问题?

【问题讨论】:

    标签: node.js postgresql


    【解决方案1】:

    所有这些问题都来自表名。正如this post 中提到的,user 的名称是 postgres 中的保留名称。因此,如果更改user表的名称,例如users,则会传递这些错误。

    【讨论】:

    • 重命名表不是最好的解决方案。查看我发布的答案;)
    • @vitaly-t 我以前看过这个帖子stackoverflow.com/questions/11919391/…。确实,我找到了解决方案,但这里提到的问题可以从另一个窗口看到。另外,对于我的情况,更改表的名称更好。无论如何,感谢您的回复。
    【解决方案2】:

    user 是 PostgreSQL 中的保留字,指的是当前登录的用户。出于这个原因,为了能够使用名称为 user 的表,名称必须始终包含在双引号内 - "user"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-20
      • 2015-09-13
      • 2021-12-04
      • 2017-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-16
      相关资源
      最近更新 更多