在Postgres 8.4或更高版本中,获取由默认值填充的数据行的最有效方式是什么,而不需要实际创建该行。例如,作为一个事务(伪代码):
基本上,我期望查询一行数据,其中parent_id为1,random_id是一个随机数(或其他函数返回值),但我不希望这条记录在表中持久存在或影响主键序列serial_id_seq。
我的选择似乎是使用像上面那样的事务或创建视图,这些视图是带有虚假行的表的副本,但我不知道每种方法的利弊,也不知道是否存在更好的方法。
我正在寻找一个答案,假设没有任何列的数据类型或默认值的先前知识,除了id之外。只有表名是已知的,并且表中不应存在id为0的记录。
过去,我将虚假记录0创建为永久记录,但我认为这条记录是一种污染(因为我通常必须将其从未来的查询中过滤掉)。
create table "mytable"
(
id serial PRIMARY KEY NOT NULL,
parent_id integer NOT NULL DEFAULT 1,
random_id integer NOT NULL DEFAULT random(),
)
begin transaction
fake_row = insert into mytable (id) values (0) returning *;
delete from mytable where id=0;
return fake_row;
end transaction
基本上,我期望查询一行数据,其中parent_id为1,random_id是一个随机数(或其他函数返回值),但我不希望这条记录在表中持久存在或影响主键序列serial_id_seq。
我的选择似乎是使用像上面那样的事务或创建视图,这些视图是带有虚假行的表的副本,但我不知道每种方法的利弊,也不知道是否存在更好的方法。
我正在寻找一个答案,假设没有任何列的数据类型或默认值的先前知识,除了id之外。只有表名是已知的,并且表中不应存在id为0的记录。
过去,我将虚假记录0创建为永久记录,但我认为这条记录是一种污染(因为我通常必须将其从未来的查询中过滤掉)。