让我们以在postgres中创建的表为例:
CREATE TABLE public.item (
id uuid NOT NULL DEFAULT gen_random_uuid(),
"size_type" public."size_type" NULL)
和这个数据类型:
CREATE TYPE public."size_type" AS ENUM (
'small',
'medium',
'large');
我想做的是用HoneySQL生成以下SQL查询,用于将值'small'插入到"size_type"项表的字段
INSERT INTO item ("size_type") VALUES ('small'::size_type);
我正在使用这种方法:
{:insert-into :item :values [{:size_type "small"}]}
但是我得到这个不匹配错误:
message": "Conflict: Uncaught PSQL exception: ERROR: column "size_type"是size_type类型,但表达式是字符类型变化的n提示:您需要重写或转换表达式。n位置:172";"psql-error-type"DATATYPE_MISMATCH">
正如Eugene在他的评论中所说,您需要的是:cast
—这里有一些可能的方法,显示了在每种情况下将生成的SQL:
user=> (require '[honey.sql :as sql])
nil
user=> (sql/format {:insert-into :item :values [{:size_type [:cast "small" :size_type]}]})
["INSERT INTO item (size_type) VALUES (CAST(? AS SIZE_TYPE))" "small"]
user=> (sql/format {:insert-into :item :values [{:size_type [:cast "small" :public.size_type]}]})
["INSERT INTO item (size_type) VALUES (CAST(? AS PUBLIC.SIZE_TYPE))" "small"]
user=> (sql/format {:insert-into :item :values [{:size_type [:cast "small" :'public.size_type]}]})
["INSERT INTO item (size_type) VALUES (CAST(? AS public.size_type))" "small"]
user=> (sql/format {:insert-into :item :values [{:size_type [:cast [:inline "small"] :'public.size_type]}]})
["INSERT INTO item (size_type) VALUES (CAST('small' AS public.size_type))"]
user=>