Re: Non-text mode for pg_dumpall - Mailing list pgsql-hackers

From Andrew Dunstan
Subject Re: Non-text mode for pg_dumpall
Date
Msg-id 3f22a8bb-29e8-40cc-97a1-309181da2c13@dunslane.net
Whole thread Raw
In response to Re: Non-text mode for pg_dumpall  (Mahendra Singh Thalor <mahi6run@gmail.com>)
Responses Re: Non-text mode for pg_dumpall
List pgsql-hackers


On 2025-07-17 Th 6:18 AM, Mahendra Singh Thalor wrote
--- a/src/bin/pg_dump/pg_restore.c
+++ b/src/bin/pg_dump/pg_restore.c
+/*
+ * read_one_statement
+ *
+ * This will start reading from passed file pointer using fgetc and read till
+ * semicolon(sql statement terminator for global.dat file)
+ *
+ * EOF is returned if end-of-file input is seen; time to shut down.
What makes it okay to use this particular subset of SQL lexing?
To support complex syntax, we used this code from another file.
I'm hearing that you copied this code from somewhere.  Running
"git grep 'time to shut down'" suggests you copied it from
InteractiveBackend().  Is that right?  I do see other similarities between
read_one_statement() and InteractiveBackend().

Copying InteractiveBackend() provides negligible assurance that this is the
right subset of SQL lexing.  Only single-user mode uses InteractiveBackend().
Single-user mode survives mostly as a last resort for recovering from having
reached xidStopLimit, is rarely used, and only superusers write queries to it.
Yes, we copied this from InteractiveBackend to read statements from
global.dat file.



Maybe we should ensure that identifiers with CR or LF are turned into Unicode quoted identifiers, so each SQL statement would always only occupy one line. Or just reject role and tablespace names with CR or LF altogether, just as we do for database names.


cheers


andrew


--
Andrew Dunstan
EDB: https://www.enterprisedb.com

pgsql-hackers by date:

Previous
From: Nico Williams
Date:
Subject: Re: Proposal: QUALIFY clause
Next
From: Christoph Berg
Date:
Subject: Re: pgsql: Introduce pg_shmem_allocations_numa view