【问题标题】:Insert jsonb into postgresql将jsonb插入postgresql
【发布时间】:2017-10-10 12:15:45
【问题描述】:

我想创建一个对象并将其保存到数据库中

Log l = new Log();

l.setTimestamp("creation_date", Util.getCurrentTimestamp());
l.setString("app_name", "name");
l.setString("log_type", "type");
l.setLong("user_id", 9l);
l.setLong("module_element_id", 9);
l.set("info", JsonHelper.toJsonString("{}"));
l.save();

我尝试了多种解决方案,但总是收到此错误:

ERROR: column "info" is of type jsonb but expression is of type character varying

如何插入jsonb?

编辑(DDL):

-- 表:public.log

-- 删除表 public.log;

CREATE TABLE public.log
(
  id bigint NOT NULL DEFAULT nextval('log_id_seq'::regclass),
  creation_date timestamp without time zone,
  app_name text,
  log_type text,
  user_id bigint,
  module_element_type bigint,
  info jsonb,
  CONSTRAINT log_pkey PRIMARY KEY (id)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE public.log
  OWNER TO postgres;

【问题讨论】:

  • Rony,您能否为您的桌子提供一个 DDL?
  • 当然,我编辑了我的帖子
  • Rony,我认为这个功能需要添加到 PostgreSQL 方言中并与:github.com/javalite/activejdbc/issues/640 相关。我试图找到 Postgres 文档,其中列出了所有具有这种奇怪语法的类型,但无法找到它。如果你找到了,我会用它把这个功能添加到框架中。
  • 好的,谢谢你的回答。如果我找到了,我会告诉你的。
  • 添加了实现,请看下面的答案

标签: activejdbc


【解决方案1】:

目前框架中缺少此实现。已在https://github.com/javalite/activejdbc/issues/640 中报告。如果您可以帮助跟踪所有 Postgres 数据类型的 Postgres 文档,其中此语法与 PreparedStatement 一起使用:

UPDATE my_table SET status = ?::status_type WHERE id = ?

然后我将能够为 PostgreSQL 方言快速实现它:https://github.com/javalite/activejdbc/blob/master/activejdbc/src/main/java/org/javalite/activejdbc/dialects/PostgreSQLDialect.java

2022 年 1 月 4 日更新:

该实现已添加到 SNAPSHOT-3.0 中,并将使其适用于 Java 16 的下一个版本 3.0。

您可以在此处查看讨论:https://github.com/javalite/javalite/issues/640

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-28
    • 1970-01-01
    • 2022-11-02
    • 1970-01-01
    • 2018-12-10
    • 1970-01-01
    • 2020-11-11
    • 2020-07-24
    相关资源
    最近更新 更多