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