pg_dump.patch
application/octet-stream
Filename: pg_dump.patch
Type: application/octet-stream
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: unified
| File | + | − |
|---|---|---|
| src/bin/pg_dump/pg_dump.c | 77 | 62 |
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index 641bece12c7..8177410f2be 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -7904,56 +7904,30 @@ getIndexes(Archive *fout, TableInfo tblinfo[], int numTables)
appendPQExpBufferStr(query, "0 AS relallfrozen, ");
appendPQExpBufferStr(query,
- "pg_catalog.pg_get_indexdef(i.indexrelid) AS indexdef, "
+ "CASE WHEN c.conrelid IS NULL THEN pg_catalog.pg_get_indexdef(i.indexrelid) END AS indexdef, "
"i.indkey, i.indisclustered, "
"c.contype, c.conname, "
"c.condeferrable, c.condeferred, "
"c.tableoid AS contableoid, "
"c.oid AS conoid, "
- "pg_catalog.pg_get_constraintdef(c.oid, false) AS condef, "
- "CASE WHEN i.indexprs IS NOT NULL THEN "
- "(SELECT pg_catalog.array_agg(attname ORDER BY attnum)"
- " FROM pg_catalog.pg_attribute "
- " WHERE attrelid = i.indexrelid) "
- "ELSE NULL END AS indattnames, "
- "(SELECT spcname FROM pg_catalog.pg_tablespace s WHERE s.oid = t.reltablespace) AS tablespace, "
- "t.reloptions AS indreloptions, ");
-
-
- if (fout->remoteVersion >= 90400)
- appendPQExpBufferStr(query,
- "i.indisreplident, ");
- else
- appendPQExpBufferStr(query,
- "false AS indisreplident, ");
+ "CASE WHEN c.contype = 'x' THEN pg_catalog.pg_get_constraintdef(c.oid, false) ELSE '' END AS condef, "
+ "i.indattnames, "
+ "s.spcname AS tablespace, "
+ "t.reloptions AS indreloptions, "
+ "i.indisreplident, ");
if (fout->remoteVersion >= 110000)
- appendPQExpBufferStr(query,
- "inh.inhparent AS parentidx, "
- "i.indnkeyatts AS indnkeyatts, "
- "i.indnatts AS indnatts, "
- "(SELECT pg_catalog.array_agg(attnum ORDER BY attnum) "
- " FROM pg_catalog.pg_attribute "
- " WHERE attrelid = i.indexrelid AND "
- " attstattarget >= 0) AS indstatcols, "
- "(SELECT pg_catalog.array_agg(attstattarget ORDER BY attnum) "
- " FROM pg_catalog.pg_attribute "
- " WHERE attrelid = i.indexrelid AND "
- " attstattarget >= 0) AS indstatvals, ");
+ appendPQExpBufferStr(query, "inh.inhparent AS parentidx, ");
else
- appendPQExpBufferStr(query,
- "0 AS parentidx, "
- "i.indnatts AS indnkeyatts, "
- "i.indnatts AS indnatts, "
- "'' AS indstatcols, "
- "'' AS indstatvals, ");
+ appendPQExpBufferStr(query, "0 AS parentidx, ");
+
+ appendPQExpBufferStr(query,
+ "i.indnkeyatts AS indnkeyatts, "
+ "i.indnatts AS indnatts, "
+ "i.indstatcols, "
+ "i.indstatvals, "
+ "i.indnullsnotdistinct, ");
- if (fout->remoteVersion >= 150000)
- appendPQExpBufferStr(query,
- "i.indnullsnotdistinct, ");
- else
- appendPQExpBufferStr(query,
- "false AS indnullsnotdistinct, ");
if (fout->remoteVersion >= 180000)
appendPQExpBufferStr(query,
@@ -7974,19 +7948,37 @@ getIndexes(Archive *fout, TableInfo tblinfo[], int numTables)
if (fout->remoteVersion >= 110000)
{
appendPQExpBuffer(query,
- "FROM unnest('%s'::pg_catalog.oid[]) AS src(tbloid)\n"
- "JOIN pg_catalog.pg_index i ON (src.tbloid = i.indrelid) "
- "JOIN pg_catalog.pg_class t ON (t.oid = i.indexrelid) "
- "JOIN pg_catalog.pg_class t2 ON (t2.oid = i.indrelid) "
- "LEFT JOIN pg_catalog.pg_constraint c "
- "ON (i.indrelid = c.conrelid AND "
- "i.indexrelid = c.conindid AND "
- "c.contype IN ('p','u','x')) "
- "LEFT JOIN pg_catalog.pg_inherits inh "
- "ON (inh.inhrelid = indexrelid) "
- "WHERE (i.indisvalid OR t2.relkind = 'p') "
- "AND i.indisready "
+ "FROM (SELECT i.indexrelid,\n"
+ " i.indrelid,\n"
+ " i.indkey,\n"
+ " i.indisclustered,\n"
+ " pg_catalog.array_agg(a.attnum ORDER BY a.attnum) FILTER (WHERE a.attstattarget >= 0) AS indstatcols,\n"
+ " pg_catalog.array_agg(a.attstattarget ORDER BY a.attnum) FILTER (WHERE a.attstattarget >= 0) AS indstatvals,\n"
+ " CASE\n"
+ " WHEN i.indexprs IS NOT NULL THEN\n"
+ " pg_catalog.array_agg(a.attname ORDER BY a.attnum)\n"
+ " ELSE NULL\n"
+ " END AS indattnames,\n"
+ " i.indisreplident,\n"
+ " i.indnkeyatts AS indnkeyatts,\n"
+ " i.indnatts AS indnatts,\n"
+ " i.indisvalid,\n"
+ " %s AS indnullsnotdistinct\n"
+ " FROM unnest('%s'::pg_catalog.oid[]) AS src(tbloid)\n"
+ " INNER JOIN pg_catalog.pg_index i ON (src.tbloid = i.indrelid)\n"
+ " INNER JOIN pg_catalog.pg_class t2 ON (t2.oid = i.indrelid)\n"
+ " LEFT JOIN pg_catalog.pg_attribute a ON (a.attrelid = i.indexrelid)\n"
+ " WHERE (i.indisvalid OR t2.relkind = 'p') AND i.indisready\n"
+ " GROUP BY i.indexrelid,i.indrelid,i.indisclustered,i.indisreplident,\n"
+ " i.indnkeyatts,i.indnatts,i.indisvalid,i.indkey,i.indexprs,indnullsnotdistinct) i\n"
+ "JOIN pg_catalog.pg_class t ON (t.oid = i.indexrelid)\n"
+ "LEFT JOIN pg_catalog.pg_tablespace s ON (s.oid = t.reltablespace)\n"
+ "LEFT JOIN pg_catalog.pg_constraint c ON (i.indrelid = c.conrelid\n"
+ " AND i.indexrelid = c.conindid\n"
+ " AND c.contype IN ('p','u','x'))\n"
+ "LEFT JOIN pg_catalog.pg_inherits inh ON (inh.inhrelid = indexrelid)\n"
"ORDER BY i.indrelid, indexname",
+ fout->remoteVersion >= 150000 ? "i.indnullsnotdistinct" : "false",
tbloids->data);
}
else
@@ -7996,15 +7988,35 @@ getIndexes(Archive *fout, TableInfo tblinfo[], int numTables)
* earlier/later versions
*/
appendPQExpBuffer(query,
- "FROM unnest('%s'::pg_catalog.oid[]) AS src(tbloid)\n"
- "JOIN pg_catalog.pg_index i ON (src.tbloid = i.indrelid) "
- "JOIN pg_catalog.pg_class t ON (t.oid = i.indexrelid) "
- "LEFT JOIN pg_catalog.pg_constraint c "
- "ON (i.indrelid = c.conrelid AND "
- "i.indexrelid = c.conindid AND "
- "c.contype IN ('p','u','x')) "
- "WHERE i.indisvalid AND i.indisready "
+ "FROM (SELECT i.indexrelid,\n"
+ " i.indrelid,\n"
+ " i.indkey,\n"
+ " i.indisclustered,\n"
+ " '' AS indstatcols,\n"
+ " '' AS indstatvals,\n"
+ " CASE\n"
+ " WHEN i.indexprs IS NOT NULL THEN\n"
+ " pg_catalog.array_agg(a.attname ORDER BY a.attnum)\n"
+ " ELSE NULL\n"
+ " END AS indattnames,\n"
+ " %s AS indisreplident,\n"
+ " i.indnatts AS indnkeyatts,\n"
+ " i.indnatts AS indnatts,\n"
+ " i.indisvalid,\n"
+ " false AS indnullsnotdistinct\n"
+ " FROM unnest('%s'::pg_catalog.oid[]) AS src(tbloid)\n"
+ " INNER JOIN pg_catalog.pg_index i ON (src.tbloid = i.indrelid)\n"
+ " LEFT JOIN pg_catalog.pg_attribute a ON (a.attrelid = i.indexrelid)\n"
+ " WHERE i.indisvalid AND i.indisready\n"
+ " GROUP BY i.indexrelid,i.indrelid,i.indisclustered,indisreplident,\n"
+ " i.indnatts,i.indisvalid,i.indkey,i.indexprs) i\n"
+ "JOIN pg_catalog.pg_class t ON (t.oid = i.indexrelid)\n"
+ "LEFT JOIN pg_catalog.pg_tablespace s ON (s.oid = t.reltablespace)\n"
+ "LEFT JOIN pg_catalog.pg_constraint c ON (i.indrelid = c.conrelid\n"
+ " AND i.indexrelid = c.conindid\n"
+ " AND c.contype IN ('p','u','x'))\n"
"ORDER BY i.indrelid, indexname",
+ fout->remoteVersion >= 90400 ? "i.indisreplident" : "false",
tbloids->data);
}
@@ -8101,7 +8113,10 @@ getIndexes(Archive *fout, TableInfo tblinfo[], int numTables)
indxinfo[j].dobj.name = pg_strdup(PQgetvalue(res, j, i_indexname));
indxinfo[j].dobj.namespace = tbinfo->dobj.namespace;
indxinfo[j].indextable = tbinfo;
- indxinfo[j].indexdef = pg_strdup(PQgetvalue(res, j, i_indexdef));
+ if (PQgetisnull(res, j, i_indexdef))
+ indxinfo[j].indexdef = NULL;
+ else
+ indxinfo[j].indexdef = pg_strdup(PQgetvalue(res, j, i_indexdef));
indxinfo[j].indnkeyattrs = atoi(PQgetvalue(res, j, i_indnkeyatts));
indxinfo[j].indnattrs = atoi(PQgetvalue(res, j, i_indnatts));
indxinfo[j].tablespace = pg_strdup(PQgetvalue(res, j, i_tablespace));