要望別対処法
テーブル情報が欲しい
実データからINSERT文を生成したい
"--inserts"オプションでINSERT文でデータを出力できる。
テーブル単位で出力したい場合、-tオプションをつける。
type nul > output.txt
pg_dump --inserts -t tablename1 -h hostname -U username -p port dbname >> output.txt
pg_dump --inserts -t tablename2 -h hostname -U username -p port dbname >> output.txt
...
find "INSERT INTO " output.txt > insert.sql
出力ファイルにはDDL文も含まれているのでfindコマンドでINSERT文のみを取り出す。
注意点として、テーブルの列数かデータ量が大きすぎるとINSERT文が途中で切れる。
その場合はCSVデータを加工してINSERT文を作る。
実データをCSV出力したい
①SQLを直接書きたい場合
psql -h hostname -U userid -d dbname -p port -c "COPY (SELECT文) TO STDOUT CSV HEADER DELIMITER ',';" > output.csv
②SQLファイルを実行したい場合
psql -h hostname -U userid -d dbname -p port -f "sqlfile" -v v1=%var%
テストデータを大量に作成+登録したい
generate_series関数を使うと、引数に指定した範囲の連番をつくることができる。
SELECT generate_series(1,100); --1から100までの連番を生成(100件出力)
また、md5関数とclock_timestamp関数を組み合わせると英数字32文字のランダムな文字列を生成することができる。
SELECT md5(clock_timestamp()::text); --32文字のランダムな英数字を表示
random関数を使うと乱数を生成できる。
SELECT FLOOR(random() * 100); --0から99までの乱数を表示
INSERT INTO SELECT文に上記関数を組み合わせて使うことで簡単にデータを生成+登録することができる。
TRUNCATE TABLE tablename;
INSERT INTO tablename
SELECT
lpad(generate_series(1,100)::text, 8, '0'),
generate_series(1,100),
substring(md5(clock_timestamp()::text),1,10),
FLOOR(random() * 100),
CURRENT_TIMESTAMP,
'TEST_DATA',
2016/01/01 00:00:00';
最終更新:2015年10月30日 23:24