]> granicus.if.org Git - postgresql/commitdiff
pg_dump: Miscellaneous tightening based on recent refactorings.
authorRobert Haas <rhaas@postgresql.org>
Thu, 16 Feb 2012 18:24:19 +0000 (13:24 -0500)
committerRobert Haas <rhaas@postgresql.org>
Thu, 16 Feb 2012 18:24:19 +0000 (13:24 -0500)
Use exit_horribly() and ExecuteSqlQueryForSingleRow() in various
places where it's equivalent, or nearly equivalent, to the prior
coding. Apart from being more compact, this also makes the error
messages for the wrong-number-of-tuples case more consistent.

src/bin/pg_dump/pg_dump.c

index c1b16f5e773c3d22070112c7ec3a8d3d414b84bd..c3c861d85787ff9b89bbb9074403a55d6b14ee5f 100644 (file)
@@ -532,16 +532,10 @@ main(int argc, char **argv)
                dump_inserts = 1;
 
        if (dataOnly && schemaOnly)
-       {
-               write_msg(NULL, "options -s/--schema-only and -a/--data-only cannot be used together\n");
-               exit_nicely(1);
-       }
+               exit_horribly(NULL, "options -s/--schema-only and -a/--data-only cannot be used together\n");
 
        if ((dataOnly || schemaOnly) && dumpSections != DUMP_UNSECTIONED)
-       {
-               write_msg(NULL, "options -s/--schema-only and -a/--data-only cannot be used with --section\n");
-               exit_nicely(1);
-       }
+               exit_horribly(NULL, "options -s/--schema-only and -a/--data-only cannot be used with --section\n");
 
        if (dataOnly)
                dumpSections = DUMP_DATA;
@@ -554,10 +548,7 @@ main(int argc, char **argv)
        }
 
        if (dataOnly && outputClean)
-       {
-               write_msg(NULL, "options -c/--clean and -a/--data-only cannot be used together\n");
-               exit_nicely(1);
-       }
+               exit_horribly(NULL, "options -c/--clean and -a/--data-only cannot be used together\n");
 
        if (dump_inserts && oids)
        {
@@ -587,20 +578,14 @@ main(int argc, char **argv)
        on_exit_nicely(pgdump_cleanup_at_exit, fout);
 
        if (fout == NULL)
-       {
-               write_msg(NULL, "could not open output file \"%s\" for writing\n", filename);
-               exit_nicely(1);
-       }
+               exit_horribly(NULL, "could not open output file \"%s\" for writing\n", filename);
 
        /* Let the archiver know how noisy to be */
        fout->verbose = g_verbose;
 
        my_version = parse_version(PG_VERSION);
        if (my_version < 0)
-       {
-               write_msg(NULL, "could not parse version string \"%s\"\n", PG_VERSION);
-               exit_nicely(1);
-       }
+               exit_horribly(NULL, "could not parse version string \"%s\"\n", PG_VERSION);
 
        /*
         * We allow the server to be back to 7.0, and up to any minor release of
@@ -668,10 +653,7 @@ main(int argc, char **argv)
                expand_schema_name_patterns(fout, &schema_include_patterns,
                                                                        &schema_include_oids);
                if (schema_include_oids.head == NULL)
-               {
-                       write_msg(NULL, "No matching schemas were found\n");
-                       exit_nicely(1);
-               }
+                       exit_horribly(NULL, "No matching schemas were found\n");
        }
        expand_schema_name_patterns(fout, &schema_exclude_patterns,
                                                                &schema_exclude_oids);
@@ -683,10 +665,7 @@ main(int argc, char **argv)
                expand_table_name_patterns(fout, &table_include_patterns,
                                                                   &table_include_oids);
                if (table_include_oids.head == NULL)
-               {
-                       write_msg(NULL, "No matching tables were found\n");
-                       exit_nicely(1);
-               }
+                       exit_horribly(NULL, "No matching tables were found\n");
        }
        expand_table_name_patterns(fout, &table_exclude_patterns,
                                                           &table_exclude_oids);
@@ -875,11 +854,8 @@ setup_connection(Archive *AH, const char *dumpencoding, char *use_role)
        if (dumpencoding)
        {
                if (PQsetClientEncoding(conn, dumpencoding) < 0)
-               {
-                       write_msg(NULL, "invalid client encoding \"%s\" specified\n",
-                                         dumpencoding);
-                       exit_nicely(1);
-               }
+                       exit_horribly(NULL, "invalid client encoding \"%s\" specified\n",
+                                                 dumpencoding);
        }
 
        /*
@@ -974,10 +950,7 @@ parseArchiveFormat(const char *format, ArchiveMode *mode)
        else if (pg_strcasecmp(format, "tar") == 0)
                archiveFormat = archTar;
        else
-       {
-               write_msg(NULL, "invalid output format \"%s\" specified\n", format);
-               exit_nicely(1);
-       }
+               exit_horribly(NULL, "invalid output format \"%s\" specified\n", format);
        return archiveFormat;
 }
 
@@ -999,10 +972,7 @@ expand_schema_name_patterns(Archive *fout,
                return;                                 /* nothing to do */
 
        if (fout->remoteVersion < 70300)
-       {
-               write_msg(NULL, "server version must be at least 7.3 to use schema selection switches\n");
-               exit_nicely(1);
-       }
+               exit_horribly(NULL, "server version must be at least 7.3 to use schema selection switches\n");
 
        query = createPQExpBuffer();
 
@@ -1831,7 +1801,6 @@ dumpDatabase(Archive *fout)
        PQExpBuffer creaQry = createPQExpBuffer();
        PGconn     *conn = GetConnection(fout);
        PGresult   *res;
-       int                     ntups;
        int                     i_tableoid,
                                i_oid,
                                i_dba,
@@ -1928,23 +1897,7 @@ dumpDatabase(Archive *fout)
                appendStringLiteralAH(dbQry, datname, fout);
        }
 
-       res = ExecuteSqlQuery(fout, dbQry->data, PGRES_TUPLES_OK);
-
-       ntups = PQntuples(res);
-
-       if (ntups <= 0)
-       {
-               write_msg(NULL, "missing pg_database entry for database \"%s\"\n",
-                                 datname);
-               exit_nicely(1);
-       }
-
-       if (ntups != 1)
-       {
-               write_msg(NULL, "query returned more than one (%d) pg_database entry for database \"%s\"\n",
-                                 ntups, datname);
-               exit_nicely(1);
-       }
+       res = ExecuteSqlQueryForSingleRow(fout, dbQry->data);
 
        i_tableoid = PQfnumber(res, "tableoid");
        i_oid = PQfnumber(res, "oid");
@@ -2040,13 +1993,7 @@ dumpDatabase(Archive *fout)
                                                  "WHERE oid = %u;\n",
                                                  LargeObjectRelationId);
 
-               lo_res = ExecuteSqlQuery(fout, loFrozenQry->data, PGRES_TUPLES_OK);
-
-               if (PQntuples(lo_res) != 1)
-               {
-                       write_msg(NULL, "dumpDatabase(): could not find pg_largeobject.relfrozenxid\n");
-                       exit_nicely(1);
-               }
+               lo_res = ExecuteSqlQueryForSingleRow(fout, loFrozenQry->data);
 
                i_relfrozenxid = PQfnumber(lo_res, "relfrozenxid");
 
@@ -2078,13 +2025,7 @@ dumpDatabase(Archive *fout)
                                                          "WHERE oid = %u;\n",
                                                          LargeObjectMetadataRelationId);
 
-                       lo_res = ExecuteSqlQuery(fout, loFrozenQry->data, PGRES_TUPLES_OK);
-
-                       if (PQntuples(lo_res) != 1)
-                       {
-                               write_msg(NULL, "dumpDatabase(): could not find pg_largeobject_metadata.relfrozenxid\n");
-                               exit_nicely(1);
-                       }
+                       lo_res = ExecuteSqlQueryForSingleRow(fout, loFrozenQry->data);
 
                        i_relfrozenxid = PQfnumber(lo_res, "relfrozenxid");
 
@@ -2407,11 +2348,8 @@ dumpBlobs(Archive *fout, void *arg)
                        /* Open the BLOB */
                        loFd = lo_open(conn, blobOid, INV_READ);
                        if (loFd == -1)
-                       {
-                               write_msg(NULL, "could not open large object %u: %s",
-                                                 blobOid, PQerrorMessage(conn));
-                               exit_nicely(1);
-                       }
+                               exit_horribly(NULL, "could not open large object %u: %s",
+                                                         blobOid, PQerrorMessage(conn));
 
                        StartBlob(fout, blobOid);
 
@@ -2420,11 +2358,8 @@ dumpBlobs(Archive *fout, void *arg)
                        {
                                cnt = lo_read(conn, loFd, buf, LOBBUFSIZE);
                                if (cnt < 0)
-                               {
-                                       write_msg(NULL, "error reading large object %u: %s",
-                                                         blobOid, PQerrorMessage(conn));
-                                       exit_nicely(1);
-                               }
+                                       exit_horribly(NULL, "error reading large object %u: %s",
+                                                                 blobOid, PQerrorMessage(conn));
 
                                WriteData(fout, buf, cnt);
                        } while (cnt > 0);
@@ -2618,10 +2553,7 @@ binary_upgrade_extension_member(PQExpBuffer upgrade_buffer,
                extobj = NULL;
        }
        if (extobj == NULL)
-       {
-               write_msg(NULL, "could not find parent extension for %s", objlabel);
-               exit_nicely(1);
-       }
+               exit_horribly(NULL, "could not find parent extension for %s", objlabel);
 
        appendPQExpBuffer(upgrade_buffer,
          "\n-- For binary upgrade, handle extension membership the hard way\n");
@@ -2760,8 +2692,7 @@ findNamespace(Archive *fout, Oid nsoid, Oid objoid)
                        if (nsoid == nsinfo->dobj.catId.oid)
                                return nsinfo;
                }
-               write_msg(NULL, "schema with OID %u does not exist\n", nsoid);
-               exit_nicely(1);
+               exit_horribly(NULL, "schema with OID %u does not exist\n", nsoid);
        }
        else
        {
@@ -5085,12 +5016,8 @@ getRules(Archive *fout, int *numRules)
                ruletableoid = atooid(PQgetvalue(res, i, i_ruletable));
                ruleinfo[i].ruletable = findTableByOid(ruletableoid);
                if (ruleinfo[i].ruletable == NULL)
-               {
-                       write_msg(NULL, "failed sanity check, parent table OID %u of pg_rewrite entry OID %u not found\n",
-                                         ruletableoid,
-                                         ruleinfo[i].dobj.catId.oid);
-                       exit_nicely(1);
-               }
+                       exit_horribly(NULL, "failed sanity check, parent table OID %u of pg_rewrite entry OID %u not found\n",
+                                                 ruletableoid, ruleinfo[i].dobj.catId.oid);
                ruleinfo[i].dobj.namespace = ruleinfo[i].ruletable->dobj.namespace;
                ruleinfo[i].dobj.dump = ruleinfo[i].ruletable->dobj.dump;
                ruleinfo[i].ev_type = *(PQgetvalue(res, i, i_ev_type));
@@ -5331,12 +5258,10 @@ getTriggers(Archive *fout, TableInfo tblinfo[], int numTables)
                                        if (OidIsValid(tginfo[j].tgconstrrelid))
                                        {
                                                if (PQgetisnull(res, j, i_tgconstrrelname))
-                                               {
-                                                       write_msg(NULL, "query produced null referenced table name for foreign key trigger \"%s\" on table \"%s\" (OID of table: %u)\n",
-                                                                         tginfo[j].dobj.name, tbinfo->dobj.name,
-                                                                         tginfo[j].tgconstrrelid);
-                                                       exit_nicely(1);
-                                               }
+                                                       exit_horribly(NULL, "query produced null referenced table name for foreign key trigger \"%s\" on table \"%s\" (OID of table: %u)\n",
+                                                                                 tginfo[j].dobj.name,
+                                                                                 tbinfo->dobj.name,
+                                                                                 tginfo[j].tgconstrrelid);
                                                tginfo[j].tgconstrrelname = pg_strdup(PQgetvalue(res, j, i_tgconstrrelname));
                                        }
                                        else
@@ -5879,11 +5804,9 @@ getTableAttrs(Archive *fout, TableInfo *tblinfo, int numTables)
                for (j = 0; j < ntups; j++)
                {
                        if (j + 1 != atoi(PQgetvalue(res, j, i_attnum)))
-                       {
-                               write_msg(NULL, "invalid column numbering in table \"%s\"\n",
-                                                 tbinfo->dobj.name);
-                               exit_nicely(1);
-                       }
+                               exit_horribly(NULL,
+                                                         "invalid column numbering in table \"%s\"\n",
+                                                         tbinfo->dobj.name);
                        tbinfo->attnames[j] = pg_strdup(PQgetvalue(res, j, i_attname));
                        tbinfo->atttypnames[j] = pg_strdup(PQgetvalue(res, j, i_atttypname));
                        tbinfo->atttypmod[j] = atoi(PQgetvalue(res, j, i_atttypmod));
@@ -5967,11 +5890,9 @@ getTableAttrs(Archive *fout, TableInfo *tblinfo, int numTables)
                                adnum = atoi(PQgetvalue(res, j, 2));
 
                                if (adnum <= 0 || adnum > ntups)
-                               {
-                                       write_msg(NULL, "invalid adnum value %d for table \"%s\"\n",
-                                                         adnum, tbinfo->dobj.name);
-                                       exit_nicely(1);
-                               }
+                                       exit_horribly(NULL,
+                                                                 "invalid adnum value %d for table \"%s\"\n",
+                                                                 adnum, tbinfo->dobj.name);
 
                                /*
                                 * dropped columns shouldn't have defaults, but just in case,
@@ -7666,13 +7587,7 @@ dumpRangeType(Archive *fout, TypeInfo *tyinfo)
                                          "rngtypid = '%u'",
                                          tyinfo->dobj.catId.oid);
 
-       res = ExecuteSqlQuery(fout, query->data, PGRES_TUPLES_OK);
-       if (PQntuples(res) != 1)
-       {
-               write_msg(NULL, "query returned %d pg_range entries for range type \"%s\"\n",
-                                 PQntuples(res), tyinfo->dobj.name);
-               exit_nicely(1);
-       }
+       res = ExecuteSqlQueryForSingleRow(fout, query->data);
 
        /*
         * DROP must be fully qualified in case same name appears in pg_catalog.
@@ -9346,11 +9261,8 @@ dumpFunc(Archive *fout, FuncInfo *finfo)
                else if (provolatile[0] == PROVOLATILE_STABLE)
                        appendPQExpBuffer(q, " STABLE");
                else if (provolatile[0] != PROVOLATILE_VOLATILE)
-               {
-                       write_msg(NULL, "unrecognized provolatile value for function \"%s\"\n",
-                                         finfo->dobj.name);
-                       exit_nicely(1);
-               }
+                       exit_horribly(NULL, "unrecognized provolatile value for function \"%s\"\n",
+                                                 finfo->dobj.name);
        }
 
        if (proisstrict[0] == 't')
@@ -11769,9 +11681,9 @@ dumpDefaultACL(Archive *fout, DefaultACLInfo *daclinfo)
                        break;
                default:
                        /* shouldn't get here */
-                       write_msg(NULL, "unknown object type (%d) in default privileges\n",
-                                         (int) daclinfo->defaclobjtype);
-                       exit_nicely(1);
+                       exit_horribly(NULL,
+                                                 "unknown object type (%d) in default privileges\n",
+                                                 (int) daclinfo->defaclobjtype);
                        type = "";                      /* keep compiler quiet */
        }
 
@@ -11785,11 +11697,8 @@ dumpDefaultACL(Archive *fout, DefaultACLInfo *daclinfo)
                                                                 daclinfo->defaclrole,
                                                                 fout->remoteVersion,
                                                                 q))
-       {
-               write_msg(NULL, "could not parse default ACL list (%s)\n",
-                                 daclinfo->defaclacl);
-               exit_nicely(1);
-       }
+               exit_horribly(NULL, "could not parse default ACL list (%s)\n",
+                                         daclinfo->defaclacl);
 
        ArchiveEntry(fout, daclinfo->dobj.catId, daclinfo->dobj.dumpId,
                                 tag->data,
@@ -11842,11 +11751,9 @@ dumpACL(Archive *fout, CatalogId objCatId, DumpId objDumpId,
 
        if (!buildACLCommands(name, subname, type, acls, owner,
                                                  "", fout->remoteVersion, sql))
-       {
-               write_msg(NULL, "could not parse ACL list (%s) for object \"%s\" (%s)\n",
-                                 acls, name, type);
-               exit_nicely(1);
-       }
+               exit_horribly(NULL,
+                                         "could not parse ACL list (%s) for object \"%s\" (%s)\n",
+                                         acls, name, type);
 
        if (sql->len > 0)
                ArchiveEntry(fout, nilCatalogId, createDumpId(),
@@ -12286,22 +12193,18 @@ dumpTableSchema(Archive *fout, TableInfo *tbinfo)
                if (PQntuples(res) != 1)
                {
                        if (PQntuples(res) < 1)
-                               write_msg(NULL, "query to obtain definition of view \"%s\" returned no data\n",
+                               exit_horribly(NULL, "query to obtain definition of view \"%s\" returned no data\n",
                                                  tbinfo->dobj.name);
                        else
-                               write_msg(NULL, "query to obtain definition of view \"%s\" returned more than one definition\n",
+                               exit_horribly(NULL, "query to obtain definition of view \"%s\" returned more than one definition\n",
                                                  tbinfo->dobj.name);
-                       exit_nicely(1);
                }
 
                viewdef = PQgetvalue(res, 0, 0);
 
                if (strlen(viewdef) == 0)
-               {
-                       write_msg(NULL, "definition of view \"%s\" appears to be empty (length zero)\n",
-                                         tbinfo->dobj.name);
-                       exit_nicely(1);
-               }
+                       exit_horribly(NULL, "definition of view \"%s\" appears to be empty (length zero)\n",
+                                                 tbinfo->dobj.name);
 
                /*
                 * DROP must be fully qualified in case same name appears in
@@ -12349,15 +12252,7 @@ dumpTableSchema(Archive *fout, TableInfo *tbinfo)
                                                          "ON (fs.oid = ft.ftserver) "
                                                          "WHERE ft.ftrelid = '%u'",
                                                          tbinfo->dobj.catId.oid);
-                       res = ExecuteSqlQuery(fout, query->data, PGRES_TUPLES_OK);
-                       if (PQntuples(res) != 1)
-                       {
-                               write_msg(NULL, ngettext("query returned %d foreign server entry for foreign table \"%s\"\n",
-                                                                                "query returned %d foreign server entries for foreign table \"%s\"\n",
-                                                                                PQntuples(res)),
-                                                 PQntuples(res), tbinfo->dobj.name);
-                               exit_nicely(1);
-                       }
+                       res = ExecuteSqlQueryForSingleRow(fout, query->data);
                        i_srvname = PQfnumber(res, "srvname");
                        i_ftoptions = PQfnumber(res, "ftoptions");
                        srvname = pg_strdup(PQgetvalue(res, 0, i_srvname));
@@ -12919,9 +12814,8 @@ getAttrName(int attrnum, TableInfo *tblInfo)
                case TableOidAttributeNumber:
                        return "tableoid";
        }
-       write_msg(NULL, "invalid column number %d for table \"%s\"\n",
-                         attrnum, tblInfo->dobj.name);
-       exit_nicely(1);
+       exit_horribly(NULL, "invalid column number %d for table \"%s\"\n",
+                                 attrnum, tblInfo->dobj.name);
        return NULL;                            /* keep compiler quiet */
 }
 
@@ -13030,11 +12924,8 @@ dumpConstraint(Archive *fout, ConstraintInfo *coninfo)
                indxinfo = (IndxInfo *) findObjectByDumpId(coninfo->conindex);
 
                if (indxinfo == NULL)
-               {
-                       write_msg(NULL, "missing index for constraint \"%s\"\n",
-                                         coninfo->dobj.name);
-                       exit_nicely(1);
-               }
+                       exit_horribly(NULL, "missing index for constraint \"%s\"\n",
+                                                 coninfo->dobj.name);
 
                if (binary_upgrade)
                        binary_upgrade_set_pg_class_oids(fout, q,
@@ -13220,8 +13111,8 @@ dumpConstraint(Archive *fout, ConstraintInfo *coninfo)
        }
        else
        {
-               write_msg(NULL, "unrecognized constraint type: %c\n", coninfo->contype);
-               exit_nicely(1);
+               exit_horribly(NULL, "unrecognized constraint type: %c\n",
+                                         coninfo->contype);
        }
 
        /* Dump Constraint Comments --- only works for table constraints */
@@ -13269,7 +13160,6 @@ static Oid
 findLastBuiltinOid_V71(Archive *fout, const char *dbname)
 {
        PGresult   *res;
-       int                     ntups;
        Oid                     last_oid;
        PQExpBuffer query = createPQExpBuffer();
 
@@ -13277,19 +13167,7 @@ findLastBuiltinOid_V71(Archive *fout, const char *dbname)
        appendPQExpBuffer(query, "SELECT datlastsysoid from pg_database where datname = ");
        appendStringLiteralAH(query, dbname, fout);
 
-       res = ExecuteSqlQuery(fout, query->data, PGRES_TUPLES_OK);
-
-       ntups = PQntuples(res);
-       if (ntups < 1)
-       {
-               write_msg(NULL, "missing pg_database entry for this database\n");
-               exit_nicely(1);
-       }
-       if (ntups > 1)
-       {
-               write_msg(NULL, "found more than one pg_database entry for this database\n");
-               exit_nicely(1);
-       }
+       res = ExecuteSqlQueryForSingleRow(fout, query->data);
        last_oid = atooid(PQgetvalue(res, 0, PQfnumber(res, "datlastsysoid")));
        PQclear(res);
        destroyPQExpBuffer(query);
@@ -13308,23 +13186,10 @@ static Oid
 findLastBuiltinOid_V70(Archive *fout)
 {
        PGresult   *res;
-       int                     ntups;
        int                     last_oid;
 
-       res = ExecuteSqlQuery(fout,
-                                       "SELECT oid FROM pg_class WHERE relname = 'pg_indexes'",
-                                       PGRES_TUPLES_OK);
-       ntups = PQntuples(res);
-       if (ntups < 1)
-       {
-               write_msg(NULL, "could not find entry for pg_indexes in pg_class\n");
-               exit_nicely(1);
-       }
-       if (ntups > 1)
-       {
-               write_msg(NULL, "found more than one entry for pg_indexes in pg_class\n");
-               exit_nicely(1);
-       }
+       res = ExecuteSqlQueryForSingleRow(fout,
+                                       "SELECT oid FROM pg_class WHERE relname = 'pg_indexes'");
        last_oid = atooid(PQgetvalue(res, 0, PQfnumber(res, "oid")));
        PQclear(res);
        return last_oid;