[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 メーリングリストの案内