如何将 json 数据插入 postgres 数据库 table
How to insert json data into postgres database table
我是初学者,正在尝试使用教程将 JSON 值插入数据库
我使用以下命令创建了 table
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 是用 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 值并将其插入数据库?
您不能在 JSON 字符串中包含任意 SQL 命令。从 JSON“观点”来看,SELECT NOW()
是一个无效值,因为它缺少双引号。但即使您使用 "select now()"
也会作为 SQL 查询执行并替换为当前时间戳)。
但我不明白你为什么要把它包装成 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
);
我是初学者,正在尝试使用教程将 JSON 值插入数据库
我使用以下命令创建了 table
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 是用 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 值并将其插入数据库?
您不能在 JSON 字符串中包含任意 SQL 命令。从 JSON“观点”来看,SELECT NOW()
是一个无效值,因为它缺少双引号。但即使您使用 "select now()"
也会作为 SQL 查询执行并替换为当前时间戳)。
但我不明白你为什么要把它包装成 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
);