Обсуждение: restoring large objects
Please can anyone confirm (or otherwise) the situation with restoring large objects? I am running with 7.1.2 (I know it's old, but I don't have a lot of choice given the application running on it), and have dumped the database with the -b option. However, the restoration process generates new ids for the large objects which means the link between the data table referencing them and the content of pg_largeobject is lost. I have seen a reference in the list archives to this being a bug, but can not find any reference to a workround or resolution. Does anyone know if there is one? I have a separate newer installation on 7.3.4. Is this still a problem on the newer versions? Many thanks for any assistance Marion
"Marion McKelvie" <marion@streamlet.co.uk> writes:
> I am running with 7.1.2 (I know it's old, but I don't have a lot of choice
> given the application running on it), and have dumped the database with
> the -b option. However, the restoration process generates new ids for the
> large objects which means the link between the data table referencing them
> and the content of pg_largeobject is lost.
pg_dump includes code in the dump that is supposed to update references
to match the new large object OIDs. Check into why that didn't work
for you. (One fairly likely possibility is that you stored the
references in the wrong type of column --- it has to be type "oid" or
"lo" or pg_dump won't think it needs updating.)
regards, tom lane
Tom
Many thanks - you're right, the references are stored (by the application
using the database) in a column of type text. That presumably means the
only way I can get a reliably restorable dump is by writing something
myself... or adding an extra duplicate column which is of type oid... or
something which somehow tracks the old and new ids... an interesting
challenge!
Regards,
Marion
-----Original Message-----
From: Tom Lane [mailto:tgl@sss.pgh.pa.us]
Sent: 06 April 2004 16:33
To: Marion McKelvie
Cc: pgsql-admin@postgresql.org
Subject: Re: [ADMIN] restoring large objects
"Marion McKelvie" <marion@streamlet.co.uk> writes:
> I am running with 7.1.2 (I know it's old, but I don't have a lot of choice
> given the application running on it), and have dumped the database with
> the -b option. However, the restoration process generates new ids for the
> large objects which means the link between the data table referencing them
> and the content of pg_largeobject is lost.
pg_dump includes code in the dump that is supposed to update references
to match the new large object OIDs. Check into why that didn't work
for you. (One fairly likely possibility is that you stored the
references in the wrong type of column --- it has to be type "oid" or
"lo" or pg_dump won't think it needs updating.)
regards, tom lane
"Marion McKelvie" <marion@streamlet.co.uk> writes:
> Many thanks - you're right, the references are stored (by the application
> using the database) in a column of type text.
Yuck :-(. A possible solution is to dump the schema and data separately
(schema in a plain text dump, data in an -Fc or -Ft dump since plain
text doesn't support dumping LOs). Then manually edit the schema file
to change the column data type to "oid". Then load. I honestly am not
sure that this will work cleanly, but it's worth trying --- and if it
doesn't work, please let me know where it goes wrong.
regards, tom lane
Good idea but I'm not sure if the application will then handle the changed
column type correctly. I'll give it a go and let you know...
-----Original Message-----
From: pgsql-admin-owner@postgresql.org
[mailto:pgsql-admin-owner@postgresql.org]On Behalf Of Tom Lane
Sent: 07 April 2004 07:08
To: Marion McKelvie
Cc: pgsql-admin@postgresql.org
Subject: Re: [ADMIN] restoring large objects
"Marion McKelvie" <marion@streamlet.co.uk> writes:
> Many thanks - you're right, the references are stored (by the application
> using the database) in a column of type text.
Yuck :-(. A possible solution is to dump the schema and data separately
(schema in a plain text dump, data in an -Fc or -Ft dump since plain
text doesn't support dumping LOs). Then manually edit the schema file
to change the column data type to "oid". Then load. I honestly am not
sure that this will work cleanly, but it's worth trying --- and if it
doesn't work, please let me know where it goes wrong.
regards, tom lane
---------------------------(end of broadcast)---------------------------
TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org
Good news - the restore worked fine with the new column type and the
application worked fine once I'd added a duplicate column of type text. So
at least I have a workable recovery procedure!
Many thanks for your help.
Marion
-----Original Message-----
From: pgsql-admin-owner@postgresql.org
[mailto:pgsql-admin-owner@postgresql.org]On Behalf Of Marion McKelvie
Sent: 07 April 2004 08:44
To: pgsql-admin@postgresql.org
Subject: Re: [ADMIN] restoring large objects
Good idea but I'm not sure if the application will then handle the changed
column type correctly. I'll give it a go and let you know...
-----Original Message-----
From: pgsql-admin-owner@postgresql.org
[mailto:pgsql-admin-owner@postgresql.org]On Behalf Of Tom Lane
Sent: 07 April 2004 07:08
To: Marion McKelvie
Cc: pgsql-admin@postgresql.org
Subject: Re: [ADMIN] restoring large objects
"Marion McKelvie" <marion@streamlet.co.uk> writes:
> Many thanks - you're right, the references are stored (by the application
> using the database) in a column of type text.
Yuck :-(. A possible solution is to dump the schema and data separately
(schema in a plain text dump, data in an -Fc or -Ft dump since plain
text doesn't support dumping LOs). Then manually edit the schema file
to change the column data type to "oid". Then load. I honestly am not
sure that this will work cleanly, but it's worth trying --- and if it
doesn't work, please let me know where it goes wrong.
regards, tom lane
---------------------------(end of broadcast)---------------------------
TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org
---------------------------(end of broadcast)---------------------------
TIP 7: don't forget to increase your free space map settings