developppのblog

木下やま人の技術メモ

DBセッションの中でタイムアウトを設定する方法

statement_timeout

指定されたミリ秒を越えてコマンドがクライアントからサーバに届いたどんなコマンドの実行も停止します。

--SQL実行時間が1秒以上経過したとき自動的にキャンセルされるよう設定

SET statement_timeout TO 1000;

SELECT * FROM test;

ERROR: ステートメントのタイムアウトによりステートメントをキャンセルしています



--タイムアウトの設定をリセット

RESET statement_timeout;




lock_timeout

テーブル、インデックス、行、またはその他のデータベースオブジェクトに対してロック獲得を試みている最中、指定されたミリ秒数を超えて待機するいかなる命令も停止されます。

時間制限はそれぞれのロック取得の試みに対し個別に適応されます。 制限は明示的ロック要求(例えばLOCK TABLE、またはSELECT FOR UPDATE without NOWAITなど)および暗黙的に取得されるロックに適用されます。

--ロック取得に1秒以上経過したとき自動的にキャンセルされるよう設定

SET lock_timeout TO 1000;

update test set column1 = ?;

ERROR: ステートメントのタイムアウトによりステートメントをキャンセルしています



--タイムアウトの設定をリセット

RESET lock_timeout;




https://www.postgresql.jp/document/9.3/html/runtime-config-client.html

CSVの作成と取込


SELECT結果をCSVに出力


--CSV作成
copy (select * from test_table) to '/tmp/ファイル名.csv';



CSVからテーブルにデータ作成


--CSVからデータ取込
copy test_table from '/tmp/ファイル名.csv';


inser文発行時に自動採番する方法

serial型

テーブルを作成する際に、自動的に番号を採番したいフィールドに対しserial型を指定する。
※serial型を指定すると自動的にシーケンスが作成される。

create table sequence_test (
  auto_no serial ,
  name varchar(50),
  primary key(auto_no)
);

insert into sequence_test (name) values('test1');
insert into sequence_test (name) values('test2');

select * from sequence_test;
--auto_no, name
--1, test1
--2, test2

--sequence_test_auto_no_seqというシーケンスが自動的に作成され連番を振っている。



シーケンスを作成しcreta tableに組み込む

テーブルを作成する際に、あらかじめ作成したシーケンスを指定する。

create sequence sequence_test_seq;

create table sequence_test (
  auto_no int DEFAULT nextval('sequence_test_seq'),
  name varchar(50),
  primary key(auto_no)
);

insert into sequence_test (name) values('test1');
insert into sequence_test (name) values('test2');

select * from sequence_test;
--auto_no, name
--1, test1
--2, test2



↑このページのトップヘ