aboutsummaryrefslogtreecommitdiff
path: root/contrib/pg_dumplo/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/pg_dumplo/main.c')
-rw-r--r--contrib/pg_dumplo/main.c380
1 files changed, 198 insertions, 182 deletions
diff --git a/contrib/pg_dumplo/main.c b/contrib/pg_dumplo/main.c
index e8ff2f72e09..3878aeca027 100644
--- a/contrib/pg_dumplo/main.c
+++ b/contrib/pg_dumplo/main.c
@@ -1,7 +1,7 @@
/* -------------------------------------------------------------------------
* pg_dumplo
*
- * $Header: /cvsroot/pgsql/contrib/pg_dumplo/Attic/main.c,v 1.6 2001/02/10 02:31:25 tgl Exp $
+ * $Header: /cvsroot/pgsql/contrib/pg_dumplo/Attic/main.c,v 1.7 2001/03/22 03:59:10 momjian Exp $
*
* Karel Zak 1999-2000
* -------------------------------------------------------------------------
@@ -12,238 +12,254 @@
#include "postgres_fe.h"
#endif
-#include <stdio.h>
+#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
-#include <errno.h>
+#include <errno.h>
#include <libpq-fe.h>
#include <libpq/libpq-fs.h>
-#include "pg_dumplo.h"
+#include "pg_dumplo.h"
#ifdef HAVE_GETOPT_LONG
- #include <getopt.h>
- #define no_argument 0
- #define required_argument 1
+#include <getopt.h>
+#define no_argument 0
+#define required_argument 1
#endif
-
-extern int errno;
-char *progname = NULL;
+extern int errno;
-int main(int argc, char **argv);
+char *progname = NULL;
+
+int main(int argc, char **argv);
static void usage(void);
-static void parse_lolist (LODumpMaster *pgLO);
-
+static void parse_lolist(LODumpMaster * pgLO);
+
/*-----
* The mother of all C functions
*-----
*/
-int
+int
main(int argc, char **argv)
-{
- LODumpMaster _pgLO, *pgLO = &_pgLO;
- char *pwd = NULL;
-
- pgLO->argv = argv;
- pgLO->argc = argc;
- pgLO->action = 0;
- pgLO->lolist = NULL;
- pgLO->user = NULL;
- pgLO->db = NULL;
- pgLO->host = NULL;
- pgLO->space = NULL;
- pgLO->index = NULL;
- pgLO->remove = FALSE;
- pgLO->quiet = FALSE;
- pgLO->counter = 0;
+{
+ LODumpMaster _pgLO,
+ *pgLO = &_pgLO;
+ char *pwd = NULL;
+
+ pgLO->argv = argv;
+ pgLO->argc = argc;
+ pgLO->action = 0;
+ pgLO->lolist = NULL;
+ pgLO->user = NULL;
+ pgLO->db = NULL;
+ pgLO->host = NULL;
+ pgLO->space = NULL;
+ pgLO->index = NULL;
+ pgLO->remove = FALSE;
+ pgLO->quiet = FALSE;
+ pgLO->counter = 0;
pgLO->lolist_start = 0;
-
+
progname = argv[0];
/* ----------
* Parse ARGV
* ----------
*/
- if (argc > 1) {
- int arg;
- extern int optind;
-
-#ifdef HAVE_GETOPT_LONG
- int l_index=0;
- static struct option l_opt[] = {
- { "help", no_argument, 0, 'h' },
- { "user", required_argument, 0, 'u' },
- { "pwd", required_argument, 0, 'p' },
- { "db", required_argument, 0, 'd' },
- { "host", required_argument, 0, 'h' },
- { "space", required_argument, 0, 's' },
- { "import", no_argument, 0, 'i' },
- { "export", no_argument, 0, 'e' },
- { "remove", no_argument, 0, 'r' },
- { "quiet", no_argument, 0, 'q' },
- { "all", no_argument, 0, 'a' },
- { "show", no_argument, 0, 'w' },
- { NULL, 0, 0, 0 }
- };
-
- while((arg = getopt_long(argc, argv, "?aehu:p:qd:l:t:irs:w", l_opt, &l_index)) != -1) {
+ if (argc > 1)
+ {
+ int arg;
+ extern int optind;
+
+#ifdef HAVE_GETOPT_LONG
+ int l_index = 0;
+ static struct option l_opt[] = {
+ {"help", no_argument, 0, 'h'},
+ {"user", required_argument, 0, 'u'},
+ {"pwd", required_argument, 0, 'p'},
+ {"db", required_argument, 0, 'd'},
+ {"host", required_argument, 0, 'h'},
+ {"space", required_argument, 0, 's'},
+ {"import", no_argument, 0, 'i'},
+ {"export", no_argument, 0, 'e'},
+ {"remove", no_argument, 0, 'r'},
+ {"quiet", no_argument, 0, 'q'},
+ {"all", no_argument, 0, 'a'},
+ {"show", no_argument, 0, 'w'},
+ {NULL, 0, 0, 0}
+ };
+
+ while ((arg = getopt_long(argc, argv, "?aehu:p:qd:l:t:irs:w", l_opt, &l_index)) != -1)
+ {
#else
- while((arg = getopt(argc, argv, "?aehu:p:qd:l:t:irs:w")) != -1) {
+ while ((arg = getopt(argc, argv, "?aehu:p:qd:l:t:irs:w")) != -1)
+ {
#endif
- switch(arg) {
- case '?':
- case 'h':
- usage();
+ switch (arg)
+ {
+ case '?':
+ case 'h':
+ usage();
exit(RE_OK);
- case 'u':
- pgLO->user = strdup(optarg);
- break;
- case 't':
- pgLO->host = strdup(optarg);
- break;
- case 'p':
- pwd = strdup(optarg);
- break;
- case 'd':
- pgLO->db = strdup(optarg);
- break;
- case 's':
- pgLO->space = strdup(optarg);
- break;
- case 'i':
- pgLO->action = ACTION_IMPORT;
- break;
- case 'l':
- pgLO->action = ACTION_EXPORT_ATTR;
- pgLO->lolist_start = optind-1;
- parse_lolist (pgLO);
- break;
- case 'e':
- case 'a':
+ case 'u':
+ pgLO->user = strdup(optarg);
+ break;
+ case 't':
+ pgLO->host = strdup(optarg);
+ break;
+ case 'p':
+ pwd = strdup(optarg);
+ break;
+ case 'd':
+ pgLO->db = strdup(optarg);
+ break;
+ case 's':
+ pgLO->space = strdup(optarg);
+ break;
+ case 'i':
+ pgLO->action = ACTION_IMPORT;
+ break;
+ case 'l':
+ pgLO->action = ACTION_EXPORT_ATTR;
+ pgLO->lolist_start = optind - 1;
+ parse_lolist(pgLO);
+ break;
+ case 'e':
+ case 'a':
pgLO->action = ACTION_EXPORT_ALL;
break;
case 'w':
pgLO->action = ACTION_SHOW;
- break;
- case 'r':
- pgLO->remove = TRUE;
- break;
- case 'q':
- pgLO->quiet = TRUE;
- break;
- default:
- fprintf(stderr, "%s: bad arg -%c\n", progname, arg);
- usage();
- exit(RE_ERROR);
+ break;
+ case 'r':
+ pgLO->remove = TRUE;
+ break;
+ case 'q':
+ pgLO->quiet = TRUE;
+ break;
+ default:
+ fprintf(stderr, "%s: bad arg -%c\n", progname, arg);
+ usage();
+ exit(RE_ERROR);
}
- }
- } else {
+ }
+ }
+ else
+ {
usage();
- exit(RE_ERROR);
- }
+ exit(RE_ERROR);
+ }
/* ----------
* Check space
* ----------
*/
- if (! pgLO->space && ! pgLO->action == ACTION_SHOW) {
- if (!(pgLO->space = getenv("PWD"))) {
+ if (!pgLO->space && !pgLO->action == ACTION_SHOW)
+ {
+ if (!(pgLO->space = getenv("PWD")))
+ {
fprintf(stderr, "%s: not set space for dump-tree (option '-s' or $PWD).\n", progname);
exit(RE_ERROR);
- }
+ }
}
-
- if (!pgLO->action) {
+
+ if (!pgLO->action)
+ {
fprintf(stderr, "%s: What do you want - export or import?\n", progname);
exit(RE_ERROR);
}
-
+
/* ----------
* Make connection
* ----------
*/
- pgLO->conn = PQsetdbLogin(pgLO->host, NULL, NULL, NULL, pgLO->db,
- pgLO->user, pwd);
-
- if (PQstatus(pgLO->conn) == CONNECTION_BAD) {
+ pgLO->conn = PQsetdbLogin(pgLO->host, NULL, NULL, NULL, pgLO->db,
+ pgLO->user, pwd);
+
+ if (PQstatus(pgLO->conn) == CONNECTION_BAD)
+ {
fprintf(stderr, "%s (connection): %s\n", progname, PQerrorMessage(pgLO->conn));
exit(RE_ERROR);
- }
+ }
pgLO->host = PQhost(pgLO->conn) ? PQhost(pgLO->conn) : "localhost";
- pgLO->db = PQdb(pgLO->conn);
- pgLO->user = PQuser(pgLO->conn);
-
-
+ pgLO->db = PQdb(pgLO->conn);
+ pgLO->user = PQuser(pgLO->conn);
+
+
/* ----------
* Init index file
* ----------
*/
- if (pgLO->action != ACTION_SHOW)
+ if (pgLO->action != ACTION_SHOW)
index_file(pgLO);
-
+
PQexec(pgLO->conn, "BEGIN");
- switch(pgLO->action) {
-
+ switch (pgLO->action)
+ {
+
case ACTION_SHOW:
case ACTION_EXPORT_ALL:
load_lolist(pgLO);
/* FALL THROUGH */
-
+
case ACTION_EXPORT_ATTR:
pglo_export(pgLO);
- if (!pgLO->quiet) {
+ if (!pgLO->quiet)
+ {
if (pgLO->action == ACTION_SHOW)
printf("\nDatabase '%s' contains %d large objects.\n\n", pgLO->db, pgLO->counter);
- else
+ else
printf("\nExported %d large objects.\n\n", pgLO->counter);
}
break;
-
+
case ACTION_IMPORT:
pglo_import(pgLO);
if (!pgLO->quiet)
printf("\nImported %d large objects.\n\n", pgLO->counter);
- break;
- }
+ break;
+ }
PQexec(pgLO->conn, "COMMIT");
- PQfinish(pgLO->conn);
-
+ PQfinish(pgLO->conn);
+
if (pgLO->action != ACTION_SHOW)
fclose(pgLO->index);
-
+
exit(RE_OK);
}
static void
-parse_lolist (LODumpMaster *pgLO)
+parse_lolist(LODumpMaster * pgLO)
{
- LOlist *ll;
- char **d,
- *loc,
- buff[MAX_TABLE_NAME + MAX_ATTR_NAME +1];
+ LOlist *ll;
+ char **d,
+ *loc,
+ buff[MAX_TABLE_NAME + MAX_ATTR_NAME + 1];
pgLO->lolist = (LOlist *) malloc(pgLO->argc * sizeof(LOlist));
-
- if (! pgLO->lolist) {
+
+ if (!pgLO->lolist)
+ {
fprintf(stderr, "%s: can't allocate memory\n", progname);
exit(RE_ERROR);
}
-
- for( d=pgLO->argv + pgLO->lolist_start, ll=pgLO->lolist;
- *d != NULL;
- d++, ll++) {
-
+
+ for (d = pgLO->argv + pgLO->lolist_start, ll = pgLO->lolist;
+ *d != NULL;
+ d++, ll++)
+ {
+
strncpy(buff, *d, MAX_TABLE_NAME + MAX_ATTR_NAME);
-
- if ((loc = strchr(buff, '.')) == NULL) {
+
+ if ((loc = strchr(buff, '.')) == NULL)
+ {
fprintf(stderr, "%s: '%s' is bad 'table.attr'\n", progname, buff);
- exit(RE_ERROR);
+ exit(RE_ERROR);
}
*loc = '\0';
ll->lo_table = strdup(buff);
@@ -254,55 +270,55 @@ parse_lolist (LODumpMaster *pgLO)
}
-static void
+static void
usage()
{
printf("\npg_dumplo %s - PostgreSQL large objects dump\n", VERSION);
- puts("pg_dumplo [option]\n\n"
+ puts("pg_dumplo [option]\n\n"
#ifdef HAVE_GETOPT_LONG
-
- "-h --help this help\n"
- "-u --user=<username> username for connection to server\n"
- "-p --password=<password> password for connection to server\n"
- "-d --db=<database> database name\n"
- "-t --host=<hostname> server hostname\n"
- "-s --space=<dir> directory with dump tree (for export/import)\n"
- "-i --import import large obj dump tree to DB\n"
- "-e --export export (dump) large obj to dump tree\n"
- "-l <table.attr ...> dump attribute (columns) with LO to dump tree\n"
- "-a --all dump all LO in DB (default)\n"
- "-r --remove if is set '-i' try remove old LO\n"
- "-q --quiet run quietly\n"
- "-w --show not dump, but show all LO in DB\n"
- ); /* puts() */
+
+ "-h --help this help\n"
+ "-u --user=<username> username for connection to server\n"
+ "-p --password=<password> password for connection to server\n"
+ "-d --db=<database> database name\n"
+ "-t --host=<hostname> server hostname\n"
+ "-s --space=<dir> directory with dump tree (for export/import)\n"
+ "-i --import import large obj dump tree to DB\n"
+ "-e --export export (dump) large obj to dump tree\n"
+ "-l <table.attr ...> dump attribute (columns) with LO to dump tree\n"
+ "-a --all dump all LO in DB (default)\n"
+ "-r --remove if is set '-i' try remove old LO\n"
+ "-q --quiet run quietly\n"
+ "-w --show not dump, but show all LO in DB\n"
+ ); /* puts() */
#else
- "-h this help\n"
- "-u <username> username for connection to server\n"
- "-p <password> password for connection to server\n"
- "-d <database> database name\n"
- "-t <hostname> server hostname\n"
- "-s <dir> directory with dump tree (for export/import)\n"
- "-i import large obj dump tree to DB\n"
- "-e export (dump) large obj to dump tree\n"
- "-l <table.attr ...> dump attribute (columns) with LO to dump tree\n"
- "-a dump all LO in DB (default)\n"
- "-r if is set '-i' try remove old LO\n"
- "-q run quietly\n"
- "-w not dump, but show all LO in DB\n"
- ); /* puts() */
+ "-h this help\n"
+ "-u <username> username for connection to server\n"
+ "-p <password> password for connection to server\n"
+ "-d <database> database name\n"
+ "-t <hostname> server hostname\n"
+ "-s <dir> directory with dump tree (for export/import)\n"
+ "-i import large obj dump tree to DB\n"
+ "-e export (dump) large obj to dump tree\n"
+ "-l <table.attr ...> dump attribute (columns) with LO to dump tree\n"
+ "-a dump all LO in DB (default)\n"
+ "-r if is set '-i' try remove old LO\n"
+ "-q run quietly\n"
+ "-w not dump, but show all LO in DB\n"
+ ); /* puts() */
#endif
puts(
- "Example (dump): pg_dumplo -d my_db -s /my_dump/dir -l t1.a t1.b t2.a\n"
- " pg_dumplo -a -d my_db -s /my_dump/dir\n"
- "Example (import): pg_dumplo -i -d my_db -s /my_dump/dir\n"
- "Example (show): pg_dumplo -w -d my_db\n\n"
- "Note: * option '-l' must be last option!\n"
- " * option '-i' without option '-r' make new large obj in DB\n"
- " not rewrite old, the '-i' UPDATE oid numbers in table.attr only!\n"
- " * if is not set option -s, the pg_dumplo use $PWD\n"
- ); /* puts()*/
+ "Example (dump): pg_dumplo -d my_db -s /my_dump/dir -l t1.a t1.b t2.a\n"
+ " pg_dumplo -a -d my_db -s /my_dump/dir\n"
+ "Example (import): pg_dumplo -i -d my_db -s /my_dump/dir\n"
+ "Example (show): pg_dumplo -w -d my_db\n\n"
+ "Note: * option '-l' must be last option!\n"
+ " * option '-i' without option '-r' make new large obj in DB\n"
+ " not rewrite old, the '-i' UPDATE oid numbers in table.attr only!\n"
+ " * if is not set option -s, the pg_dumplo use $PWD\n"
+ ); /* puts() */
}