如何使用generate_series和random为PostgreSQL生成大数据样本?

798qvoo8  于 2023-11-18  发布在  PostgreSQL
关注(0)|答案(1)|浏览(109)

我想生成大数据样本(近100万条记录),用于研究postgresql中的tuplesort. c的多相合并,我希望模式如下:

CREATE TABLE Departments (code VARCHAR(4), UNIQUE (code));
CREATE TABLE Towns (
  id SERIAL UNIQUE NOT NULL,
  code VARCHAR(10) NOT NULL, -- not unique
  article TEXT,
  name TEXT NOT NULL, -- not unique
  department VARCHAR(4) NOT NULL REFERENCES Departments (code),
  UNIQUE (code, department)
);

字符串
如何使用generate_series和random来实现?非常感谢!

gcuhipw9

gcuhipw91#

将一百万个数据列插入Towns

insert into towns (
    code, article, name, department
)
select
    left(md5(i::text), 10),
    md5(random()::text),
    md5(random()::text),
    left(md5(random()::text), 4)
from generate_series(1, 1000000) s(i)

字符串
因为idserial,所以没有必要包括它。

参考

left(字符串文本,n个整数)→文本

  • 返回字符串中的前n个字符,或者当n为负数时,返回除最后一个字符之外的所有字符|n|字符.
  • left('abcde', 2) → ab
    md5(文本)→文本
  • 计算参数的MD5杂凑,并以十六进制写入结果。
  • md5('abc') → 900150983cd24fb0 d6963f7d28e17f72(第一个字符)
    generate_series(开始整数,停止整数[,步进整数])→整数集

生成一系列从开始到停止的值,步长为step。step默认为1。
Refs

相关问题