@@ -8162,150 +8162,77 @@ getTableAttrs(Archive *fout, TableInfo *tblinfo, int numTables)
8162
8162
8163
8163
resetPQExpBuffer(q);
8164
8164
8165
+ appendPQExpBuffer(q,
8166
+ "SELECT\n"
8167
+ "a.attnum,\n"
8168
+ "a.attname,\n"
8169
+ "a.atttypmod,\n"
8170
+ "a.attstattarget,\n"
8171
+ "a.attstorage,\n"
8172
+ "t.typstorage,\n"
8173
+ "a.attnotnull,\n"
8174
+ "a.atthasdef,\n"
8175
+ "a.attisdropped,\n"
8176
+ "a.attlen,\n"
8177
+ "a.attalign,\n"
8178
+ "a.attislocal,\n"
8179
+ "pg_catalog.format_type(t.oid, a.atttypmod) AS atttypname,\n");
8180
+
8165
8181
if (fout->remoteVersion >= 110000)
8166
- {
8167
- /* atthasmissing and attmissingval are new in 11 */
8168
- appendPQExpBuffer(q, "SELECT a.attnum, a.attname, a.atttypmod, "
8169
- "a.attstattarget, a.attstorage, t.typstorage, "
8170
- "a.attnotnull, a.atthasdef, a.attisdropped, "
8171
- "a.attlen, a.attalign, a.attislocal, "
8172
- "pg_catalog.format_type(t.oid,a.atttypmod) AS atttypname, "
8173
- "array_to_string(a.attoptions, ', ') AS attoptions, "
8174
- "CASE WHEN a.attcollation <> t.typcollation "
8175
- "THEN a.attcollation ELSE 0 END AS attcollation, "
8176
- "a.attidentity, "
8177
- "pg_catalog.array_to_string(ARRAY("
8178
- "SELECT pg_catalog.quote_ident(option_name) || "
8179
- "' ' || pg_catalog.quote_literal(option_value) "
8180
- "FROM pg_catalog.pg_options_to_table(attfdwoptions) "
8181
- "ORDER BY option_name"
8182
- "), E',\n ') AS attfdwoptions ,"
8182
+ appendPQExpBuffer(q,
8183
8183
"CASE WHEN a.atthasmissing AND NOT a.attisdropped "
8184
- "THEN a.attmissingval ELSE null END AS attmissingval "
8185
- "FROM pg_catalog.pg_attribute a LEFT JOIN pg_catalog.pg_type t "
8186
- "ON a.atttypid = t.oid "
8187
- "WHERE a.attrelid = '%u'::pg_catalog.oid "
8188
- "AND a.attnum > 0::pg_catalog.int2 "
8189
- "ORDER BY a.attnum",
8190
- tbinfo->dobj.catId.oid);
8191
- }
8192
- else if (fout->remoteVersion >= 100000)
8193
- {
8194
- /*
8195
- * attidentity is new in version 10.
8196
- */
8197
- appendPQExpBuffer(q, "SELECT a.attnum, a.attname, a.atttypmod, "
8198
- "a.attstattarget, a.attstorage, t.typstorage, "
8199
- "a.attnotnull, a.atthasdef, a.attisdropped, "
8200
- "a.attlen, a.attalign, a.attislocal, "
8201
- "pg_catalog.format_type(t.oid,a.atttypmod) AS atttypname, "
8202
- "array_to_string(a.attoptions, ', ') AS attoptions, "
8203
- "CASE WHEN a.attcollation <> t.typcollation "
8204
- "THEN a.attcollation ELSE 0 END AS attcollation, "
8205
- "a.attidentity, "
8206
- "pg_catalog.array_to_string(ARRAY("
8207
- "SELECT pg_catalog.quote_ident(option_name) || "
8208
- "' ' || pg_catalog.quote_literal(option_value) "
8209
- "FROM pg_catalog.pg_options_to_table(attfdwoptions) "
8210
- "ORDER BY option_name"
8211
- "), E',\n ') AS attfdwoptions ,"
8212
- "NULL as attmissingval "
8213
- "FROM pg_catalog.pg_attribute a LEFT JOIN pg_catalog.pg_type t "
8214
- "ON a.atttypid = t.oid "
8215
- "WHERE a.attrelid = '%u'::pg_catalog.oid "
8216
- "AND a.attnum > 0::pg_catalog.int2 "
8217
- "ORDER BY a.attnum",
8218
- tbinfo->dobj.catId.oid);
8219
- }
8220
- else if (fout->remoteVersion >= 90200)
8221
- {
8222
- /*
8223
- * attfdwoptions is new in 9.2.
8224
- */
8225
- appendPQExpBuffer(q, "SELECT a.attnum, a.attname, a.atttypmod, "
8226
- "a.attstattarget, a.attstorage, t.typstorage, "
8227
- "a.attnotnull, a.atthasdef, a.attisdropped, "
8228
- "a.attlen, a.attalign, a.attislocal, "
8229
- "pg_catalog.format_type(t.oid,a.atttypmod) AS atttypname, "
8230
- "array_to_string(a.attoptions, ', ') AS attoptions, "
8231
- "CASE WHEN a.attcollation <> t.typcollation "
8232
- "THEN a.attcollation ELSE 0 END AS attcollation, "
8184
+ "THEN a.attmissingval ELSE null END AS attmissingval,\n");
8185
+ else
8186
+ appendPQExpBuffer(q,
8187
+ "NULL AS attmissingval,\n");
8188
+
8189
+ if (fout->remoteVersion >= 100000)
8190
+ appendPQExpBuffer(q,
8191
+ "a.attidentity,\n");
8192
+ else
8193
+ appendPQExpBuffer(q,
8194
+ "'' AS attidentity,\n");
8195
+
8196
+ if (fout->remoteVersion >= 90200)
8197
+ appendPQExpBuffer(q,
8233
8198
"pg_catalog.array_to_string(ARRAY("
8234
8199
"SELECT pg_catalog.quote_ident(option_name) || "
8235
8200
"' ' || pg_catalog.quote_literal(option_value) "
8236
8201
"FROM pg_catalog.pg_options_to_table(attfdwoptions) "
8237
8202
"ORDER BY option_name"
8238
- "), E',\n ') AS attfdwoptions, "
8239
- "NULL as attmissingval "
8240
- "FROM pg_catalog.pg_attribute a LEFT JOIN pg_catalog.pg_type t "
8241
- "ON a.atttypid = t.oid "
8242
- "WHERE a.attrelid = '%u'::pg_catalog.oid "
8243
- "AND a.attnum > 0::pg_catalog.int2 "
8244
- "ORDER BY a.attnum",
8245
- tbinfo->dobj.catId.oid);
8246
- }
8247
- else if (fout->remoteVersion >= 90100)
8248
- {
8203
+ "), E',\n ') AS attfdwoptions,\n");
8204
+ else
8205
+ appendPQExpBuffer(q,
8206
+ "'' AS attfdwoptions,\n");
8207
+
8208
+ if (fout->remoteVersion >= 90100)
8249
8209
/*
8250
- * attcollation is new in 9.1. Since we only want to dump COLLATE
8251
- * clauses for attributes whose collation is different from their
8252
- * type's default, we use a CASE here to suppress uninteresting
8253
- * attcollations cheaply.
8210
+ * Since we only want to dump COLLATE clauses for attributes whose
8211
+ * collation is different from their type's default, we use a CASE
8212
+ * here to suppress uninteresting attcollations cheaply.
8254
8213
*/
8255
- appendPQExpBuffer(q, "SELECT a.attnum, a.attname, a.atttypmod, "
8256
- "a.attstattarget, a.attstorage, t.typstorage, "
8257
- "a.attnotnull, a.atthasdef, a.attisdropped, "
8258
- "a.attlen, a.attalign, a.attislocal, "
8259
- "pg_catalog.format_type(t.oid,a.atttypmod) AS atttypname, "
8260
- "array_to_string(a.attoptions, ', ') AS attoptions, "
8214
+ appendPQExpBuffer(q,
8261
8215
"CASE WHEN a.attcollation <> t.typcollation "
8262
- "THEN a.attcollation ELSE 0 END AS attcollation, "
8263
- "NULL AS attfdwoptions, "
8264
- "NULL as attmissingval "
8265
- "FROM pg_catalog.pg_attribute a LEFT JOIN pg_catalog.pg_type t "
8266
- "ON a.atttypid = t.oid "
8267
- "WHERE a.attrelid = '%u'::pg_catalog.oid "
8268
- "AND a.attnum > 0::pg_catalog.int2 "
8269
- "ORDER BY a.attnum",
8270
- tbinfo->dobj.catId.oid);
8271
- }
8272
- else if (fout->remoteVersion >= 90000)
8273
- {
8274
- /* attoptions is new in 9.0 */
8275
- appendPQExpBuffer(q, "SELECT a.attnum, a.attname, a.atttypmod, "
8276
- "a.attstattarget, a.attstorage, t.typstorage, "
8277
- "a.attnotnull, a.atthasdef, a.attisdropped, "
8278
- "a.attlen, a.attalign, a.attislocal, "
8279
- "pg_catalog.format_type(t.oid,a.atttypmod) AS atttypname, "
8280
- "array_to_string(a.attoptions, ', ') AS attoptions, "
8281
- "0 AS attcollation, "
8282
- "NULL AS attfdwoptions, "
8283
- "NULL as attmissingval "
8284
- "FROM pg_catalog.pg_attribute a LEFT JOIN pg_catalog.pg_type t "
8285
- "ON a.atttypid = t.oid "
8286
- "WHERE a.attrelid = '%u'::pg_catalog.oid "
8287
- "AND a.attnum > 0::pg_catalog.int2 "
8288
- "ORDER BY a.attnum",
8289
- tbinfo->dobj.catId.oid);
8290
- }
8216
+ "THEN a.attcollation ELSE 0 END AS attcollation,\n");
8291
8217
else
8292
- {
8293
- /* need left join here to not fail on dropped columns ... */
8294
- appendPQExpBuffer(q, "SELECT a.attnum, a.attname, a.atttypmod, "
8295
- "a.attstattarget, a.attstorage, t.typstorage, "
8296
- "a.attnotnull, a.atthasdef, a.attisdropped, "
8297
- "a.attlen, a.attalign, a.attislocal, "
8298
- "pg_catalog.format_type(t.oid,a.atttypmod) AS atttypname, "
8299
- "'' AS attoptions, 0 AS attcollation, "
8300
- "NULL AS attfdwoptions, "
8301
- "NULL as attmissingval "
8302
- "FROM pg_catalog.pg_attribute a LEFT JOIN pg_catalog.pg_type t "
8303
- "ON a.atttypid = t.oid "
8304
- "WHERE a.attrelid = '%u'::pg_catalog.oid "
8305
- "AND a.attnum > 0::pg_catalog.int2 "
8306
- "ORDER BY a.attnum",
8307
- tbinfo->dobj.catId.oid);
8308
- }
8218
+ appendPQExpBuffer(q,
8219
+ "0 AS attcollation,\n");
8220
+
8221
+ if (fout->remoteVersion >= 90000)
8222
+ appendPQExpBuffer(q,
8223
+ "array_to_string(a.attoptions, ', ') AS attoptions\n");
8224
+ else
8225
+ appendPQExpBuffer(q,
8226
+ "'' AS attoptions\n");
8227
+
8228
+ appendPQExpBuffer(q,
8229
+ /* need left join here to not fail on dropped columns ... */
8230
+ "FROM pg_catalog.pg_attribute a LEFT JOIN pg_catalog.pg_type t "
8231
+ "ON a.atttypid = t.oid\n"
8232
+ "WHERE a.attrelid = '%u'::pg_catalog.oid "
8233
+ "AND a.attnum > 0::pg_catalog.int2\n"
8234
+ "ORDER BY a.attnum",
8235
+ tbinfo->dobj.catId.oid);
8309
8236
8310
8237
res = ExecuteSqlQuery(fout, q->data, PGRES_TUPLES_OK);
8311
8238
@@ -8363,7 +8290,7 @@ getTableAttrs(Archive *fout, TableInfo *tblinfo, int numTables)
8363
8290
tbinfo->attstattarget[j] = atoi(PQgetvalue(res, j, i_attstattarget));
8364
8291
tbinfo->attstorage[j] = *(PQgetvalue(res, j, i_attstorage));
8365
8292
tbinfo->typstorage[j] = *(PQgetvalue(res, j, i_typstorage));
8366
- tbinfo->attidentity[j] = (i_attidentity >= 0 ? *(PQgetvalue(res, j, i_attidentity)) : '\0' );
8293
+ tbinfo->attidentity[j] = *(PQgetvalue(res, j, i_attidentity));
8367
8294
tbinfo->needs_override = tbinfo->needs_override || (tbinfo->attidentity[j] == ATTRIBUTE_IDENTITY_ALWAYS);
8368
8295
tbinfo->attisdropped[j] = (PQgetvalue(res, j, i_attisdropped)[0] == 't');
8369
8296
tbinfo->attlen[j] = atoi(PQgetvalue(res, j, i_attlen));
@@ -16023,7 +15950,7 @@ dumpTableSchema(Archive *fout, TableInfo *tbinfo)
16023
15950
/*
16024
15951
* Dump per-column attributes.
16025
15952
*/
16026
- if (tbinfo->attoptions[j] && tbinfo->attoptions[j] [0] != '\0')
15953
+ if (tbinfo->attoptions[j][0] != '\0')
16027
15954
{
16028
15955
appendPQExpBuffer(q, "ALTER TABLE ONLY %s ",
16029
15956
qualrelname);
@@ -16037,7 +15964,6 @@ dumpTableSchema(Archive *fout, TableInfo *tbinfo)
16037
15964
* Dump per-column fdw options.
16038
15965
*/
16039
15966
if (tbinfo->relkind == RELKIND_FOREIGN_TABLE &&
16040
- tbinfo->attfdwoptions[j] &&
16041
15967
tbinfo->attfdwoptions[j][0] != '\0')
16042
15968
{
16043
15969
appendPQExpBuffer(q, "ALTER FOREIGN TABLE %s ",
0 commit comments