2015年12月08日

Perl Postgres 高速INSERT COPY pg_putline サンプルプログラム

Perl Postgres 高速INSERT COPY pg_putline サンプルプログラム

<perlプログラムサンプル>
#!/usr/bin/perl

use strict;
use utf8;
use DBI;
use DBD::Pg;

#INSERTデータ作成(test_tableのカラム数分valuesを作成する)
my @values;
push( @values, "1" );
push( @values, "bbbb" );
push( @values, "cccc" );

#タブ区切り文字列にする
my $str_values;
foreach my $val ( @values ){
$str_values .= $val ."\t";
}
$str_values = substr( $str_values,0,-2);

#DB接続
$dbh = DBI->connect($data_source, $user_name);

$dbh->do("COPY test_table FROM STDIN");
$dbh_pg->pg_putline($str_values);
$dbh_pg->pg_endcopy;
$dbh_pg->commit();
$dbh_pg->disconnect();


※テーブルのINDEXをDROPしてから、COPYして、最後にCREATEすると更に高速化する  

Posted by kumagai_nori at 11:14Comments(0)TrackBack(0)clip!

2015年12月04日

postgre テーブルレコード件数を高速で確認する count/reltuples/vacuum

<方法1>
select count(*) from table_name;

<方法2>
select relname as name, reltuples as rows from pg_class where relname ='table_name'

※1と2で件数が異なる場合は、反映されていない状態なので、
「vacuum table_name」で反映させる。

※各環境でのvacuumの実行頻度は、DB管理者へ。

※方法2は、リアルタイムで反映されないので、プログラムには組み込めないが、
 レコード数が多いテーブルでのデータ調査の際には高速で結果が返る。
 ただし、vacuumに時間が掛かるので注意。
  
Posted by kumagai_nori at 15:42Comments(0)TrackBack(0)clip!

2015年02月10日

Postgresのバックアップ、リストア pg_dump/pg_restore

Postgresのバックアップ、リストア

■テーブルのダンプを取得する
pg_dump -h (ホスト名) -p (ポート番号) -U (ユーザ名)-t (テーブル名) (データベース名) >(ダンプファイル名).dmp

ダンプファイルの中身は、テーブルを再構築するコマンドが記載されています。

■テーブルをリストアする
cat (ダンプファイル名).dmp | -h (ホスト名) -p (ポート番号) -U (ユーザ名)-t (テーブル名) (データベース名)
catコマンドで、各行を実行します。

create文など、不要なものは、コメントアウトすればいいです。
※AutoCommitは、OFFにして実行をしてください。


■テーブルをダンプを取得して、アーカイブ圧縮する
%pg_dump -h (ホスト名) -p (ポート番号) -U (ユーザ名)-t (テーブル名) (データベース名) | bzip2 -9 > (ダンプファイル名).bz2

■アーカイブ圧縮したダンプファイルをリストアする
%bzcat (ダンプファイル名).bz2 | psql -h (ホスト名) -p (ポート番号) -U (ユーザ名) (データベース名)

pg_dump

pg_restore
  
Posted by kumagai_nori at 11:46Comments(0)TrackBack(0)clip!

2013年12月06日

PostgreSQL クライアントのオートコミット設定

PostgreSQL クライアントのオートコミット設定

※基本的にPostgreSQLは、オートコミットONになっています。

vi ~/.psqlrc
で、.psqlrcを開いて
\set AUTOCOMMIT off
を記載する。

次回、psqlでログインをすると、AUTOCOMMITがOFFになっています。

\SET AUTOCOMMIT off
と書いてしまった場合のエラーメッセージ
「\SET:不正なコマンドです。」

SET AUTOCOMMIT off
(¥がない)と書いてしまったときのエラーメッセージ
「unrecognized boolean value; assuming "on".」

SET AUTOCOMMIT TO off
(¥なし、かつ、TOあり)と書いてしまったときのエラーメッセージ
「ERROR: SET AUTOCOMMIT TO OFFはもうサポートされていません。」



<検証環境>
Linux CentOS6.4
Postgres8.4.18  
Posted by kumagai_nori at 18:15Comments(0)TrackBack(0)clip!

2013年12月03日

PostgreSQL 基本コマンド コマンドライン

PostgreSQL 基本コマンド コマンドライン

PostgreSQLへログイン
#psql [データベース名] -U [ユーザ名]

データベース一覧(SHOW DATABASES)
postgres=>¥l

テーブル一覧(SHOW TABLES)
postgres=>¥d

テーブル定義の参照(DESCRIBE)
postgres=>¥d [テーブル名]

PostgreSQLプロンプトから抜ける(QUIT)
postgres=>¥q

PostgreSQLプロンプト上で、シェルコマンド(¥!)
postgres=> ¥! ls

PostgreSQLプロンプト上で、ファイル読み込み(実行)
postgres=> ¥! vi test.sql
postgres=> ¥i test.sql

コマンドプロンプト上で、ファイル読み込み(実行)
#psql [データベース名] -f test.sql

  
Posted by kumagai_nori at 20:04Comments(0)TrackBack(0)clip!