PostgreSQL:/dev/random でデータ生成

Oracle社員だった3年前に書いたデータローディング方法の PostgreSQL 版を試す機会がありました。

8-bitおよび16-bitの正整数の乱数をロード

SQL*Loaderで/dev/urandomが生成する乱数をロード

まずはカラムを3つ持つテーブル作成します。

$ psql --command=\
"create table tbl_3ints(col1 int8,col2 int4,col3 int2)" \
--dbname=pg_extend_rs_test_db

ランダムな数値を生成してロードします。

$ (paste \
> <(od -td8 -vAn --width=8 /dev/urandom) \
> <(od -td4 -vAn --width=4 /dev/urandom) \
> <(od -td2 -vAn --width=2 /dev/urandom)) |
> head -1000000 |
>  target/postgres/postgres_12.1/bin/psql --command=\
> "\copy tbl_3ints from stdin" \
> --dbname=pg_extend_rs_test_db
COPY 1000000

3つの列のそれぞれ最大値、最小値を見てみます。

$ target/postgres/postgres_12.1/bin/psql --command="\
> select max(col1),min(col1),max(col2),min(col2),max(col3),min(col3) from tbl_3ints" \
>  --dbname=pg_extend_rs_test_db
         max         |         min          |    max     |     min     |  max  |  min
---------------------+----------------------+------------+-------------+-------+--------
 9223347717291865858 | -9223350930557596683 | 2147482657 | -2147482881 | 32767 | -32768
(1 row)

それぞれ符号付き8バイト整数、32-bit 整数、16ビットIntegerの理論上の最大、最小に近い値が入ったことを確認できました!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s