PostgreSQLのラージオブジェクトを削除

PostgreSQLにてラージオブジェクトを削除したいということで、実施してみました。
ラージオブジェクトを保持するテーブルの該当カラムには、oid がセットされており、実際のラージオブジェクトは、別のところに保存されています。

delete from hogetable where delete_flag = 1;

で、対象のレコードを削除してもラージオブジェクトは削除されません。よってvacuumによっても削除されないのでデータサイズは、変わらないです。
ちなみに、データベースのサイズ確認を行う方法は以下です。

select pg_database_size('データベース名');

最終的にラージオブジェクトを削除する方法は以下。

select lo_unlink(oidのカラム) from hogetable where delete_flag=1;

delete from hogetable where delete_flag=1;

そして、削除を実施してから、vacuum実行でデータサイズも縮小。。

|

表ロックの備忘録


表ロックを行う必要がありちょっと調べたので備忘録。

Lock用のSQLは、トランザクション内で用いトランザクションをコミット、ロールバックすると
ロックが開放される。(Oracle,PostgreSQL)

SQL方言は、この2つのDBは基本的に同じらしい。

LOCK [ TABLE ] name [, ...] [ IN lockmode MODE ] [ NOWAIT ]
(WAITの設定が、Oracle側にあるかは不明。。)

lockmodeは、下記のようにあるがOracleとPostgreSQLで同じように扱えるのは、下記。
ROW SHARE | ROW EXCLUSIVE | SHARE | SHARE ROW EXCLUSIVE | EXCLUSIVE

PostgreSQLには、それ以外に
ACCESS SHAREACCESS EXCLUSIVESHARE UPDATE EXCLUSIVE
というモードがあるらしい。


--PostgreSQL

LOCK

--Oracle


表ロックの種類と相互関係 - Oralce/オラクルをマスターするための基本と仕組み

Powered by ScribeFire.

|

listen_address設定ではまる

PowerGresV3.1(PostgreSQL8.0.9)の調査を実施したところ、今までPowerGresV2.5でやっていたように設定してもTCP/IP接続が出来ない。。

しばらくはまった結果、PostgreSQL8.xからは、tcp_socket設定が無くなったかわりにlisten_address設定が追加されていた。しかも設定しなおしたら、サービスを再起動する必要があり結構はまりました。

listen_addressの設定は下記のように設定。
"localhost","192.168.1.12"←これはサーバーのIDアドレス
”*”とすれば何でもOKということになるらしい。

また、PowerGresでは、マスクの記述が変わったため下記のようにpg_hba.confを編集

192.168.1.13/32

などなど。192.168.1.*からアクセス許可したい場合は、192.168.1.0/24となる。

ちなみに、チューニングについてもちょっと調べてみました。
下記サイトは分かりやすくてよかったです。

PostgreSQL:チューニング勘所 - Y-110's Wiki

powered by performancing firefox

|