如何将DEFAULT插入到PostgreSQL中的准备好的语句中

我试图使用准备好的语句将值插入数据库,但是有时我需要为特定值插入文字'DEFAULT',我该怎么做?

CREATE TABLE test (id int,firstname text default 'john',lastname text default 'doe');

这是我想要做的,但是使用准备好的语句:

insert into test (id,firstname,lastname) VALUES ('1',DEFAULT,DEFAULT);

但这会导致错误(出于明显的原因):

PREPARE testprep (integer,text,text) AS INSERT INTO test (id,lastname) VALUES ($1,$2,$3);
EXECUTE testprep('1',DEFAULT);

错误:

ERROR: syntax error at or near "DEFAULT"

我使用SQL-Fiddle创建的两个示例:

http://sqlfiddle.com/#!15/243ae/1/0

http://sqlfiddle.com/#!15/243ae/3/0

ww8q2008 回答:如何将DEFAULT插入到PostgreSQL中的准备好的语句中

没有准备好的语句可以做到这一点。

唯一的转义将是表上的BEFORE INSERT触发器,它将某些数据值(例如NULL)替换为默认值。但这不是一个好的解决方案,并且会降低性能。

另一种转义途径是使用多个准备好的语句,每个要设置为默认值的组合都使用一个语句。

,

您可以尝试从插入语句中省略默认列:

PREPARE testprep (integer) AS
INSERT INTO test (id) VALUES ($1);
EXECUTE testprep('1');

Postgres应该依靠表定义中firstnamelastname列的默认值。来自Postgres documentation

  

当创建新行并且未为某些列指定值时,这些列将使用其各自的默认值填充。

本文链接:https://www.f2er.com/3166280.html

大家都在问