[pgsql-jp: 28409] Re: pg_restore で lo がリストアできない

minoru fukuda fukuda @ kinol.co.jp
2002年 12月 21日 (土) 15:27:13 JST


福田@キノルです。

手作業で dump & restore するのが面倒だったので
結局、pg_dump と contrib/pg_dumplo を組み合わせて使うようにしました。

<dump>
pg_dump -d test > test.dump
pg_dumplo -d test -e -a -s dumpdir

<restore>
dropdb test
createdb test
psql test < test.dump
pg_dumplo -i -d test -s dumpdir

ただし、pg_dumplo は lo型に対応していなかったので、
対応させるようにソースを修正しました。もし必要なら
以下のパッチを当ててください。(ただし lo専用になっており
oidでのBLOBには対応できません。)

以下 pg_dumplo 用のパッチです ============================

--- pg_dumplo/lo_export.c	Fri Sep  6 06:01:16 2002
+++ pg_dumplo_kinol/lo_export.c	Sat Dec 21 14:53:50 2002
@@ -45,7 +45,7 @@
 					   "WHERE a.attnum > 0 "
 					   "    AND a.attrelid = c.oid "
 					   "    AND a.atttypid = t.oid "
-					   "    AND t.typname = 'oid' "
+					   "    AND t.typname = 'lo' "
 					   "    AND c.relkind = 'r' "
 					   "    AND c.relname NOT LIKE 'pg_%'");
 
@@ -109,7 +109,7 @@
 		 * Query: find the LOs referenced by this column
 		 */
 		snprintf(Qbuff, QUERY_BUFSIZ,
-				 "SELECT DISTINCT l.loid FROM \"%s\" x, pg_largeobject l WHERE x.\"%s\" = l.loid",
+				 "SELECT DISTINCT l.loid FROM \"%s\" x, pg_largeobject l WHERE oid(x.\"%s\") = l.loid",
 				 ll->lo_table, ll->lo_attr);
 
 		/* puts(Qbuff); */
--- pg_dumplo/lo_import.c	Fri Sep  6 06:01:16 2002
+++ pg_dumplo_kinol/lo_import.c	Sat Dec 21 14:49:10 2002
@@ -80,7 +80,7 @@
 		 * UPDATE oid in tab
 		 */
 		snprintf(Qbuff, QUERY_BUFSIZ,
-				 "UPDATE \"%s\" SET \"%s\"=%u WHERE \"%s\"=%u",
+				 "UPDATE \"%s\" SET \"%s\"=lo(%u) WHERE oid(\"%s\")=%u",
 			loa.lo_table, loa.lo_attr, new_oid, loa.lo_attr, loa.lo_oid);
 
 		/* fprintf(stderr, Qbuff); */

-- 
福田稔 Minoru Fukuda
fukuda @ kinol.co.jp
kinol interactive inc.
http://www.kinol.co.jp




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