Я использую postgres 12, PGJDBC-NG 0.8.3
и org.clojure/java.jdbc 0.7.10
.
Я пытаюсь переключить свой код с использования стандартной реализации postgres JDB C (* От 1005 *https://jdbc.postgresql.org/) до pgjdb c -ng (https://impossibl.github.io/pgjdbc-ng/), чтобы я мог использовать функцию прослушивания / уведомления, которой нет у postgres JDB C.
Мне удалось заставить работать базовую c функциональность, но у меня возникли некоторые проблемы при вставке типов EAN13 в базу данных (тип расширения: https://www.postgresql.org/docs/9.1/isn.html).
Вот пример таблицы:
create extension isn;
create table p (barcode ean13 primary key);
insert into p values ('5023652298064');
select barcode from p;
+-----------------+
| barcode |
|-----------------|
| 502-365229806-4 |
+-----------------+
Теперь в моем коде есть запись EAN, которую я использую для вставки символов eans:
(defrecord ean [s])
(def ds (doto (PGDataSource.)
(.setDatabaseUrl "jdbc:pgsql://localhost:5432/web?user=root")))
(jdbc/execute! {:datasource ds}
["update products set ean = ? where id = 5242" (db/->ean "5012583002819")])
Execution error (IllegalStateException) at com.impossibl.postgres.types.Type/getParameterFormat (Type.java:318).
type has no supported parameter format: ean13(3767891)
Это был код, который я использовал для установка правильного типа на складе postgres JDB C:
(extend-protocol clojure.java.jdbc/ISQLParameter
ean
(set-parameter [val ^PreparedStatement stmt ^long i]
; The type of this parameter should be PGObject, which is a wrapper provided by
; the postgres JDBC driver for types which does not have a corresponding type in
; the JDBC interface.
(.setObject stmt i (doto (PGobject.)
(.setType "ean13")
(.setValue (.s val))))))
, но я не могу понять, как это работает на PGJDB C -NG! Какое правильное расширение ISQLParameter, чтобы это работало?