Fix pg_dump to do the right thing when escaping the contents of large objects.
Tom Lane <tgl@sss.pgh.pa.us>
Fix pg_dump to do the right thing when escaping the contents of large objects. The previous implementation got it right in most cases but failed in one: if you pg_dump into an archive with standard_conforming_strings enabled, then pg_restore to a script file (not directly to a database), the script will set standard_conforming_strings = on but then emit large object data as nonstandardly-escaped strings. At the moment the code is made to emit hex-format bytea strings when dumping to a script file. We might want to change to old-style escaping for backwards compatibility, but that would be slower and bulkier. If we do, it's just a matter of reimplementing appendByteaLiteral(). This has been broken for a long time, but given the lack of field complaints I'm not going to worry about back-patching.
Files
| Path | Change | +/− |
|---|---|---|
| src/bin/pg_dump/dumputils.c | modified | +50 −1 |
| src/bin/pg_dump/dumputils.h | modified | +4 −1 |
| src/bin/pg_dump/pg_backup_archiver.c | modified | +8 −9 |
| src/bin/pg_dump/pg_backup_archiver.h | modified | +4 −1 |
| src/bin/pg_dump/pg_backup_null.c | modified | +9 −8 |