12 #include "catalog/pg_class_d.h" 65 static struct option long_options[] = {
92 my_opts->
quiet =
false;
95 my_opts->
nodb =
false;
100 my_opts->
port = NULL;
106 if (strcmp(argv[1],
"--help") == 0 || strcmp(argv[1],
"-?") == 0)
111 if (strcmp(argv[1],
"--version") == 0 || strcmp(argv[1],
"-V") == 0)
113 puts(
"oid2name (PostgreSQL) " PG_VERSION);
119 while ((c =
getopt_long(argc, argv,
"d:f:h:H:io:p:qsSt:U:x", long_options, &optindex)) != -1)
156 my_opts->
quiet =
true;
185 fprintf(stderr,
_(
"Try \"%s --help\" for more information.\n"), progname);
192 fprintf(stderr,
_(
"%s: too many command-line arguments (first is \"%s\")\n"),
194 fprintf(stderr,
_(
"Try \"%s --help\" for more information.\n"), progname);
202 printf(
"%s helps examining the file structure used by PostgreSQL.\n\n" 206 " -f, --filenode=FILENODE show info for table with given file node\n" 207 " -i, --indexes show indexes and sequences too\n" 208 " -o, --oid=OID show info for table with given OID\n" 209 " -q, --quiet quiet (don't show headers)\n" 210 " -s, --tablespaces show all tablespaces\n" 211 " -S, --system-objects show system objects too\n" 212 " -t, --table=TABLE show info for named table\n" 213 " -V, --version output version information, then exit\n" 214 " -x, --extended extended (show additional columns)\n" 215 " -?, --help show this help, then exit\n" 216 "\nConnection options:\n" 217 " -d, --dbname=DBNAME database to connect to\n" 218 " -h, --host=HOSTNAME database server host or socket directory\n" 219 " -H same as -h, deprecated option\n" 220 " -p, --port=PORT database server port number\n" 221 " -U, --username=USERNAME connect as specified database user\n" 222 "\nThe default action is to show all database OIDs.\n\n" 223 "Report bugs to <%s>.\n" 224 "%s home page: <%s>\n",
225 progname, progname, PACKAGE_BUGREPORT, PACKAGE_NAME, PACKAGE_URL);
236 if (eary->
alloc == 0)
245 eary->
alloc *
sizeof(
char *));
274 for (i = 0; i < eary->
num; i++)
275 length += strlen(eary->
array[i]);
280 for (i = 0; i < eary->
num; i++)
307 #define PARAMS_ARRAY_SIZE 7 312 keywords[0] =
"host";
314 keywords[1] =
"port";
315 values[1] = my_opts->
port;
316 keywords[2] =
"user";
318 keywords[3] =
"password";
320 keywords[4] =
"dbname";
321 values[4] = my_opts->
dbname;
322 keywords[5] =
"fallback_application_name";
406 length = (
int *)
pg_malloc(
sizeof(
int) * nfields);
407 for (j = 0; j < nfields; j++)
408 length[j] = strlen(
PQfname(res, j));
410 for (i = 0; i < nrows; i++)
412 for (j = 0; j < nfields; j++)
423 for (j = 0, l = 0; j < nfields; j++)
437 for (i = 0; i < nrows; i++)
439 for (j = 0; j < nfields; j++)
461 "SELECT d.oid AS \"Oid\", datname AS \"Database Name\", " 462 "spcname AS \"Tablespace\" FROM pg_catalog.pg_database d JOIN pg_catalog.pg_tablespace t ON " 463 "(dattablespace = t.oid) ORDER BY 2");
475 char *addfields =
",c.oid AS \"Oid\", nspname AS \"Schema\", spcname as \"Tablespace\" ";
478 "SELECT pg_catalog.pg_relation_filenode(c.oid) as \"Filenode\", relname as \"Table Name\" %s " 479 "FROM pg_catalog.pg_class c " 480 " LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace " 481 " LEFT JOIN pg_catalog.pg_database d ON d.datname = pg_catalog.current_database()," 482 " pg_catalog.pg_tablespace t " 487 " WHEN reltablespace <> 0 THEN reltablespace" 488 " ELSE dattablespace" 494 opts->
systables ?
"" :
"n.nspname NOT IN ('pg_catalog', 'information_schema') AND n.nspname !~ '^pg_toast' AND");
512 bool written =
false;
513 char *addfields =
",c.oid AS \"Oid\", nspname AS \"Schema\", spcname as \"Tablespace\" ";
521 qualifiers = (
char *)
pg_malloc(strlen(comma_oids) + strlen(comma_tables) +
522 strlen(comma_filenodes) + 80);
527 ptr +=
sprintf(ptr,
"c.oid IN (%s)", comma_oids);
534 ptr +=
sprintf(ptr,
"pg_catalog.pg_relation_filenode(c.oid) IN (%s)", comma_filenodes);
541 sprintf(ptr,
"c.relname ~~ ANY (ARRAY[%s])", comma_tables);
545 free(comma_filenodes);
548 todo =
psprintf(
"SELECT pg_catalog.pg_relation_filenode(c.oid) as \"Filenode\", relname as \"Table Name\" %s\n" 549 "FROM pg_catalog.pg_class c\n" 550 " LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace\n" 551 " LEFT JOIN pg_catalog.pg_database d ON d.datname = pg_catalog.current_database(),\n" 552 " pg_catalog.pg_tablespace t\n" 559 " WHEN reltablespace <> 0 THEN reltablespace\n" 560 " ELSE dattablespace\n" 563 "ORDER BY relname\n",
578 "SELECT oid AS \"Oid\", spcname as \"Tablespace Name\"\n" 579 "FROM pg_catalog.pg_tablespace");
603 if (my_opts->
dbname == NULL)
605 my_opts->
dbname =
"postgres";
606 my_opts->
nodb =
true;
614 printf(
"All tablespaces:\n");
647 printf(
"All databases:\n");
int sql_exec(PGconn *, const char *sql, bool quiet)
int PQnfields(const PGresult *res)
char * PQerrorMessage(const PGconn *conn)
void sql_exec_dumpalltbspc(PGconn *, struct options *)
size_t PQescapeString(char *to, const char *from, size_t length)
char * PQgetvalue(const PGresult *res, int tup_num, int field_num)
char * PQfname(const PGresult *res, int field_num)
void * pg_malloc(size_t size)
const char * get_progname(const char *argv0)
PGconn * sql_conn(struct options *)
#define pg_log_error(...)
int getopt_long(int argc, char *const argv[], const char *optstring, const struct option *longopts, int *longindex)
void get_opts(int, char **, struct options *)
void pg_logging_init(const char *argv0)
char * psprintf(const char *fmt,...)
#define PARAMS_ARRAY_SIZE
void PQfinish(PGconn *conn)
#define MemSet(start, val, len)
char * simple_prompt(const char *prompt, bool echo)
int PQntuples(const PGresult *res)
ExecStatusType PQresultStatus(const PGresult *res)
int main(int argc, char **argv)
PGconn * PQconnectdbParams(const char *const *keywords, const char *const *values, int expand_dbname)
static void help(const char *progname)
void sql_exec_dumpalldbs(PGconn *, struct options *)
#define required_argument
char * pg_strdup(const char *in)
void * pg_realloc(void *ptr, size_t size)
void add_one_elt(char *eltname, eary *eary)
void PQclear(PGresult *res)
char * get_comma_elts(eary *eary)
#define ALWAYS_SECURE_SEARCH_PATH_SQL
static Datum values[MAXATTR]
int PQconnectionNeedsPassword(const PGconn *conn)
void sql_exec_searchtables(PGconn *, struct options *)
PGresult * PQexec(PGconn *conn, const char *query)
ConnStatusType PQstatus(const PGconn *conn)
void sql_exec_dumpalltables(PGconn *, struct options *)