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

问题描述 投票:1回答:2

我正在尝试使用准备好的语句将值插入数据库,但是有时我需要为特定值插入文字'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, firstname, lastname) VALUES ($1, $2, $3);
EXECUTE testprep('1',DEFAULT,DEFAULT);

错误:

ERROR: syntax error at or near "DEFAULT"

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

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

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

postgresql prepared-statement
2个回答
0
投票

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

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

Postgres应该依赖表定义中firstnamelastname列的默认值。从Postgres documentation

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


0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.