PostgreSQL にサンプルデータをつっこむ
とにかく数がないとPlannerが実行計画をどう判断するかわからないので調べたいという場面を想定している
想定するテーブル
code:ddl.sql
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
age INTEGER NOT NULL
);
CREATE INDEX users_id_idx ON users(id);
CREATE TABLE posts (
id SERIAL PRIMARY KEY,
user_id INT NOT NULL REFERENCES users(id),
text TEXT NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX posts_id_userid_idx ON posts(id, user_id);
サンプルデータをつっこむ
code:users.sql
INSERT INTO users (id, age, name)
SELECT
generate_series(0, 500000) AS id, -- 0..500000まで作る(これがシーケンシャル)
floor(random()*70) AS age, -- 70歳までランダム値を丸め関数
md5(random()::text) AS name; -- 文字列であれば何でも良い ::text の型キャストがミソ
code:posts.sql
INSERT INTO posts (id, user_id, text)
SELECT
generate_series(0, 500000) AS id, -- 同上(もっと多くてもいいかも)
floor(random()*500000)::int AS user_id, -- 作成した user_id を選び取りたい
md5(random()::text) AS text; -- 同上