如何使用node-postgres从JSON文件中获取数据并将其放入Postgres SQL表中

k2arahey  于 2022-11-22  发布在  Node.js
关注(0)|答案(1)|浏览(110)

我有一个Json文件,看起来像下面的例子

[
  {
    Title: "abc",
    Author: "abc",
    Genre: "abc"
  },
]

我正在创建一个全堆栈应用程序,我在项目中使用了node-postgres和Elephant SQL我已经创建了包含上述列的表我想知道如何使用JSON数据填充表
我已经导入了JSON文件并尝试了以下方法

export async function insert () {
    
    
    return await pool.query (
        `INSERT INTO books (
          Title,
          Author,
          Genre) (
          SELECT  Title, Author, Genre
          FROM json_populate_recordset(NULL::books, $1::JSON)
        );`,
        [JSON.stringify(books)]
      );
}

我得到一个错误如下错误:关系“books”的列“title”中的空值违反了非空约束
我在JSON文件中的所有属性都有值,但它一直给我这个错误,有人能告诉我我做错了什么吗?

3z6pesqy

3z6pesqy1#

除非您引用您的标识符,否则Postgres会将其标准化为小写。您可以在错误消息中看到这一点,列实际上被命名为title而不是Title。您可以将查询更改为

INSERT INTO books ("Title", "Author", "Genre")
SELECT "Title", "Author", "Genre"
FROM json_populate_recordset(NULL::books, $1::JSON);

以获得更好的错误消息-您还需要更改表定义。然而,在Postgres中使用大写标识符是一种反模式(它是非常规的,只会使一切变得更困难),所以最好避免它。不如使用您现有的SQL,或者编写

INSERT INTO books (title, author, genre)
SELECT title, author, genre
FROM json_populate_recordset(NULL::books, $1::JSON);

并将JSON数据更改为

[
  {
    "title": "abc",
    "author": "abc",
    "genre": "abc"
  }
]

相关问题