如何使用generate_series和random生成Postgresql的大数据样本?

abe*_*008 17 postgresql

我想生成大数据样本(差不多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)
);
Run Code Online (Sandbox Code Playgroud)

如何使用generate_series和随机来做呢?非常感谢!

Clo*_*eto 36

要插入一百万行 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)
Run Code Online (Sandbox Code Playgroud)

因为id是,serial所以没有必要包括它.

  • `s(i)` 是表和列的别名。它告诉查询将来自`generate_series` 函数的数据视为一个名为`s` 的表,其中一个名为`i` 的列。您可以通过在上面的语句中用等效的 `si::text` 替换 `i::text` 来看到这一点。有关详细信息,请参阅此 [文档](https://www.postgresql.org/docs/current/queries-table-expressions.html#QUERIES-TABLE-ALIASES)。 (10认同)
  • 什么是`s(i)`? (7认同)