gpt4 book ai didi

Postgresql,选择 "fake"行

转载 作者:行者123 更新时间:2023-11-29 11:26:49 24 4
gpt4 key购买 nike

在 Postgres 8.4 或更高版本中,什么是最有效的方法来获取默认填充的一行数据而不实际创建行。例如,作为交易(伪代码):

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。

我的选择似乎是使用上述事务或创建 View ,这些 View 是添加了假行的表的副本,但我不知道每种方法的所有优缺点,也不知道是否存在更好的方法。

我正在寻找一个答案,该答案假定不事先了解任何列的数据类型或默认值,id 或列的编号或顺序除外。只有表名是已知的,表中不应存在 ID 为 0 的记录。

过去,我创建了假记录 0 作为永久记录,但我开始将此记录视为一种污染(因为我通常必须将其从 future 的查询中过滤掉)。

最佳答案

您可以将表定义和默认值复制到临时表:

CREATE TEMP TABLE table_name_rt (LIKE table_name INCLUDING DEFAULTS);

并使用此临时表生成虚拟行。这样的表将在 session (或事务)结束时被删除,并且仅对当前 session 可见。

关于Postgresql,选择 "fake"行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17985164/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com