Thread: 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