作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在寻找一种快速的方法来填充一个充满约束和复杂性的表,以便基本上将两行克隆一千多次,以便有 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/
我是一名优秀的程序员,十分优秀!