postgresql 如何将json数据插入postgres数据库表

8hhllhi2  于 2023-03-12  发布在  PostgreSQL
关注(0)|答案(1)|浏览(350)

我是一个初学者,尝试使用教程将JSON值插入数据库
我使用以下命令创建了该表

CREATE TABLE table_name( id character varying(50),
                         data json NOT NULL,
                         active boolean NOT NULL,
                         created_at timestamp with time zone NOT NULL,
                         updated_at timestamp with time zone NOT NULL,
                         CONSTRAINT table_name_pkey PRIMARY KEY (id)
                       );

该表使用table_name创建。
现在我尝试将值插入到数据库中:

INSERT INTO table_name
SELECT id,data,active,created_at,updated_at
FROM json_populate_record (NULL::table_name,
     '{
        "id": "1",
        "data":{
                "key":"value"
                },
         "active":true,
         "created_at": SELECT NOW(),
         "updated_at": SELECT NOW()
       }'
  );

它将引发以下错误
错误:类型JSON“{”的输入语法无效
有人能帮我解析JSON值并将其插入到DB中吗?

db2dz4w8

db2dz4w81#

不能在JSON字符串中包含任意SQL命令。从JSON“Angular ”来看,SELECT NOW()是无效值,因为它缺少双引号。但即使使用"select now()",它也会作为SQL查询执行并替换为当前时间戳)。
但是我不明白为什么要把它 Package 成jsonb_populate_record,更好的解决方案(至少在我看来)是:

INSERT INTO table_name (id, data, active, created_at, updated_dat)
VALUES ('1', '{"key": "value"}', true, now(), now());

如果你真的想把事情复杂化,你需要使用字符串连接:

SELECT id,data,active,created_at,updated_at
FROM json_populate_record (NULL::table_name,
     format('{
        "id": "1",
        "data":{
                "key":"value"
                },
         "active":true,
         "created_at": "%s", 
         "updated_at": "%s"
       }', now(), now())::json
  );

相关问题