我正在尝试使用准备好的语句将值插入数据库,但是有时我需要为特定值插入文字'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创建的两个示例:
您可以尝试从插入语句中省略默认列:
PREPARE testprep (integer) AS
INSERT INTO test (id) VALUES ($1);
EXECUTE testprep('1');
Postgres应该依赖表定义中firstname
和lastname
列的默认值。从Postgres documentation:
当创建新行并且未为某些列指定值时,这些列将使用各自的默认值填充。
没有准备好的语句可以做到这一点。
唯一的转义将是表上的BEFORE INSERT
触发器,该触发器将某些数据值(例如NULL
)替换为默认值。但这不是一个好的解决方案,并且会降低性能。
另一种转义途径是使用几个准备好的语句,每个要设置为默认值的组合都使用一个。