gpt4 book ai didi

database - PostgreSQL:有没有办法克隆一行数据以便用测试数据填充表?

转载 作者:搜寻专家 更新时间:2023-10-30 20:08:01 24 4
gpt4 key购买 nike

我正在寻找一种快速的方法来填充一个充满约束和复杂性的表,以便基本上将两行克隆一千多次,以便有 1000 多行的基础进行测试。

我理解基本结构应该是这样的:

INSERT INTO footbl( 
foo1, foo2, foo3
)
SELECT foo,
foo1,
foo3
FROM footbl WHERE id=1;

我如何接受这个语句并让它重复一千次?

编辑:

在尝试 generate_series 解决方案时 -

INSERT INTO footbl(foo1, foo2, foo3)
SELECT foo, foo1, foo3
FROM footbl CROSS JOIN
generate_series(1, 1000)
WHERE pk = 1;

我收到以下错误。

ERROR: duplicate key value violates unique constraint "pk" 
DETAIL: Key (pk)=(1) already exists.

我尝试使用 pk 的下一个值,但它没有插入任何内容。

INSERT 0 0 

从列出的列中删除 pk 以允许它完全自动生成会给出错误,即列“pk”中的空值违反了非空约束。查看“pk”的表定义:

pk | bigint | not null | plain 

评论中还提供了一些进一步的说明,该数据库是从客户端提取的骨架数据库。我引入了只是架构和全局定义,以及 2 行数据。由于复杂的原因,我无法返回他们的数据库以导出 1000 行数据,因此我希望专门克隆 2 个现有行中的 1 个,1000 次。这也意味着我最好不要修改现有的约束、修饰符等任何东西,并保持架构原样不变,以便对这个克隆的数据库进行准确的测试。

第二次编辑:

由于时间不够,我继续修改架构如下:

CREATE SEQUENCE foo_id_seq;
ALTER TABLE foo ALTER COLUMN pk SET DEFAULT nextval('temp_id_seq');

这解决了我的 PK 冲突问题并允许生成行。但是,如果有人对如何在 修改架构的情况下实现同样的事情有任何想法,请在下面发表评论并让我知道。谢谢!

最佳答案

您可以使用generate_series():

INSERT INTO footbl(foo1, foo2, foo3)
SELECT foo, foo1, foo3
FROM footbl CROSS JOIN
generate_series(1, 1000)
WHERE id = 1;

关于database - PostgreSQL:有没有办法克隆一行数据以便用测试数据填充表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46576265/

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