[pgsql-jp: 31015] Re: ラージオブジェクトを他のDBに移管する方法

sugita @ sra.co.jp sugita @ sra.co.jp
2003年 9月 10日 (水) 16:35:40 JST


From: "t-yamashita" <t-yamashita @ bcon.co.jp>
Subject: [pgsql-jp: 30938] Re: ラージオブジェクトを他のDBに移管する方法
Date: Wed, 3 Sep 2003 19:06:12 +0900

;;;  >=# \lo_import /etc/passwd
;;;  >lo_import 619568
;;;  >=# \lo_import /etc/passwd
;;;  >lo_import 619569
;;;  >=# \lo_import /etc/passwd
;;;  >could not create large object for file "/etc/passwd"
;;;  >=# \lo_import /etc/passwd
;;;  >lo_import 619571
;;; 
;;; このエラーは oid = 619570 もしくは loid = 619570 のデータが存在するため、と解釈
;;; したのですが、

  ラージオブジェクトの識別子として 619570 が発番され、その番号で pg_largeobject 
に保存しようとして loid と重複してエラーとなっています。

;;; 		  oid や loid はどんなルールで発番されているのでしょうか。

  両方とも共通の処理 src/backend/catalog/catalog.c:newoid() によって発番され、
そこから呼ばれる src/backend/access/transam/varsup.c:GetNewObjectId() を見ると
分かります。

;;; 自分で作ったテーブルのデータにはそれぞれにoidが存在するのですが、pg_largeobject
;;; に SELECT oid をかけても Attribute "oid" not found のエラーがでるだけでした。
;;; そこで pg_largeobjectテーブルには oid は存在しないと考え、

  PostgreSQL 7.2 からタプルに OID がないテーブルを CREATE TABLE ... WITHOUT
OIDS で作成できるようになり、pg_largeobject はそのように作成されているので、シ
ステムカラム oid を持ちません。

;;; 										いつ
;;; データが作成できなくなるか、不安があります。

  符号なし 4 バイト整数の上限の約 42 億回のオブジェクトとラージオブジェクトの
生成を行うとラップアラウンドして、論理的な整合性が取れなくなり得ます。

;;; また、oid や loid はシーケンス値のように setval でコントロールがきくのでしょう
;;; か。

  効きません。COPY .. WITH OIDS というのはあります。

  使った事はないのですが contrib/pg_dumplo はどうですか? export と import が
できるようです。


Kenji Sugita                                      




pgsql-jp メーリングリストの案内