PostgreSQL插入Null可以使用COPY工作,但是不能使用INSERT

时间:2019-01-16 15:33:57

标签: sql postgresql psql postgresql-9.6

我有一个名为mycolumn的bigint列。我使用PSQL命令执行SQL脚本。

使用COPY命令:

COPY public.mytable (myothercol, mycolumn) FROM stdin;
1   \N
\.

这有效。但是以下方法不起作用:

EXECUTE 'insert into public.mytable (myothercol, mycolumn) values ($1,$2);' USING 
1,NULL;

这给了我错误:

  

列“ mycolumn”的类型为bigint,但表达式的类型为text

为什么insert不能用于空值,而COPY却不能工作?

1 个答案:

答案 0 :(得分:1)

您最好告诉PostgreSQL将参数显式转换为bigint

EXECUTE 'insert into public.mytable (myothercol, mycolumn) values ($1,$2::bigint);'
   USING 1,NULL;

问题是PostgreSQL无法自动知道NULL是什么数据类型,因此它猜测textCOPY不必猜测数据类型。