将json条目转换为表记录的最佳方法

走开

我有一张桌子:

CREATE TABLE IF NOT EXISTS "account" (
  "id" UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  "nickname" TEXT NOT NULL UNIQUE,
  "time_updated" TIMESTAMPTZ NOT NULL
);

和一个功能:

CREATE OR REPLACE FUNCTION account_register(
  e JSON,
  t TIMESTAMPTZ DEFAULT now()
) RETURNS JSON AS $$
DECLARE
  o_account ACCOUNT;
BEGIN
  INSERT INTO "account" (nickname, time_updated) VALUES (e -> 'nickname', t) RETURNING * INTO o_account;
  RETURN row_to_json(o_account);
END
$$ LANGUAGE 'plpgsql';

它像

SELECT account_register('{"nickname":"bob"}'); 

--
-- {"id"":"d3a771a9-fcff-419f-ad80-b8f5caa847da",
--  "nickname":"bob",
--  "time_updated":"2021-02-08T00:32:25.698293"}
-- 

我希望能够替换e JSONtoacc ACCOUNT并使它看起来像这样:

CREATE OR REPLACE FUNCTION account_register_new(
  acc ACCOUNT, -- was JSON
  t TIMESTAMPTZ DEFAULT now()
) RETURNS ACCOUNT AS $$ -- was JSON
DECLARE
  o_account ACCOUNT;
BEGIN
  -- <2. NEEDS HELP>
  INSERT INTO "account" <RECORD acc> RETURNING * INTO o_account;
  RETURN o_account
END
$$ LANGUAGE 'plpgsql';

使用方式如下:

-- <1. NEEDS HELP>
SELECT account_register(<TO_ACCOUNT>('{"nickname":"bob"}')); 

所以我有两个问题:

  1. 如何将json{"nickname":"bob"}转换为记录type ACCOUNT
  2. 如何将记录type ACCOUNT插入ACCOUNT
a_horse_with_no_name

您需要从函数中传递的记录中访问列:

CREATE OR REPLACE FUNCTION account_register(
  p_new_row account, 
  p_time_updated TIMESTAMPTZ DEFAULT now()
) 
  RETURNS account
AS $$
  insert into account (nickname, time_updated)
  values ((p_new_row).nickname, p_time_updated)
  returning *;
$$ 
LANGUAGE sql;

要将JSON值转换为已知记录类型,请使用 json_populate_record()

select account_register(json_populate_record (null::account, '{"nickname":"bob"}'));

顺便说一句:您可以接受JSON值的函数可以简化。无需使用PL / pgSQL。并且您应该使用提取昵称,->>以便获得一个text值,而不是json(或jsonb)。

CREATE OR REPLACE FUNCTION account_register(
  p_new_row jsonb, 
  p_time_updated  TIMESTAMPTZ DEFAULT now()
) 
  RETURNS jsonb 
AS $$
  with new_account as (
    INSERT INTO "account" (nickname, time_updated) 
    VALUES (e ->> 'nickname', t) 
    RETURNING *
  )
  select to_jsonb(new_account)
  from new_account;
$$ 
LANGUAGE sql;

jsonb 是建议在Postgres中使用JSON的数据类型。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将结果集转换为json的最佳方法是什么

来自分类Dev

将结构转换为Json的最佳方法是什么?

来自分类Dev

将结构转换为Json的最佳方法是什么?

来自分类Dev

将int转换为数组的最佳方法

来自分类Dev

Dart将列表转换为JSON编码的映射条目

来自分类Dev

Python:将具有key = value行的文件转换为json的最佳方法

来自分类Dev

将json字符串转换为对象数组的最佳方法是什么?

来自分类Dev

异步程序。将记录转换为 JSON 的正确方法是什么

来自分类Dev

骨干:将模型转换为不同模型类的最佳方法

来自分类Dev

将int转换为char数组的最佳方法

来自分类Dev

将Dictionary转换为两个列表的最佳方法

来自分类Dev

将特定字符串转换为数组的最佳方法

来自分类Dev

将多个类转换为子类的最佳方法

来自分类Dev

将59.94fps视频转换为29.97的最佳方法?

来自分类Dev

将列表列表转换为元组列表的最佳方法?

来自分类Dev

将标记行转换为R中的列的最佳方法

来自分类Dev

将获胜机会转换为布尔的最佳方法是什么?

来自分类Dev

将嵌套对象数组转换为对象数组的最佳方法

来自分类Dev

骨干:将模型转换为不同模型类的最佳方法

来自分类Dev

将InputStream对象转换为String的最佳方法

来自分类Dev

将特定字符串转换为数组的最佳方法

来自分类Dev

将度数转换为象限名称的最佳方法是什么

来自分类Dev

Django:将数据从模型转换为视图的最佳方法

来自分类Dev

TensorFlow:将标量转换为一维张量的最佳方法

来自分类Dev

将数字转换为相应单词的最佳方法是什么?

来自分类Dev

将数据转换为 HTML 对象的最佳方法

来自分类Dev

在python中将Pandas数据框转换为json的最佳方法

来自分类Dev

在python中将Pandas数据框转换为json的最佳方法

来自分类Dev

将 JSON(键是列,值是记录)转换为数据框

Related 相关文章

  1. 1

    将结果集转换为json的最佳方法是什么

  2. 2

    将结构转换为Json的最佳方法是什么?

  3. 3

    将结构转换为Json的最佳方法是什么?

  4. 4

    将int转换为数组的最佳方法

  5. 5

    Dart将列表转换为JSON编码的映射条目

  6. 6

    Python:将具有key = value行的文件转换为json的最佳方法

  7. 7

    将json字符串转换为对象数组的最佳方法是什么?

  8. 8

    异步程序。将记录转换为 JSON 的正确方法是什么

  9. 9

    骨干:将模型转换为不同模型类的最佳方法

  10. 10

    将int转换为char数组的最佳方法

  11. 11

    将Dictionary转换为两个列表的最佳方法

  12. 12

    将特定字符串转换为数组的最佳方法

  13. 13

    将多个类转换为子类的最佳方法

  14. 14

    将59.94fps视频转换为29.97的最佳方法?

  15. 15

    将列表列表转换为元组列表的最佳方法?

  16. 16

    将标记行转换为R中的列的最佳方法

  17. 17

    将获胜机会转换为布尔的最佳方法是什么?

  18. 18

    将嵌套对象数组转换为对象数组的最佳方法

  19. 19

    骨干:将模型转换为不同模型类的最佳方法

  20. 20

    将InputStream对象转换为String的最佳方法

  21. 21

    将特定字符串转换为数组的最佳方法

  22. 22

    将度数转换为象限名称的最佳方法是什么

  23. 23

    Django:将数据从模型转换为视图的最佳方法

  24. 24

    TensorFlow:将标量转换为一维张量的最佳方法

  25. 25

    将数字转换为相应单词的最佳方法是什么?

  26. 26

    将数据转换为 HTML 对象的最佳方法

  27. 27

    在python中将Pandas数据框转换为json的最佳方法

  28. 28

    在python中将Pandas数据框转换为json的最佳方法

  29. 29

    将 JSON(键是列,值是记录)转换为数据框

热门标签

归档