]> granicus.if.org Git - postgresql/commitdiff
dbf2pg - Insert xBase-style .dbf-files into a PostgreSQL-table
authorBruce Momjian <bruce@momjian.us>
Thu, 31 Jul 2003 02:12:43 +0000 (02:12 +0000)
committerBruce Momjian <bruce@momjian.us>
Thu, 31 Jul 2003 02:12:43 +0000 (02:12 +0000)
  There is an option "-s oldname=newname", which changes the old field name of
  the dbf-file to the newname in PostgeSQL. If the length of the new name is 0,
  the field is skiped. If you want to skip the first field of the dbf-file,
  you get the wildest error-messages from the backend.
  dbf2pg load the dbf-file via "COPY tablename FROM STDIN". If you skip the
  first field, it is an \t to much in STDIN.

A fix could be an counter j=0, which increments only, if a field is imported
(IF (strlen(fields[h].db_name)> 0) j++. And only if j > 1 (if an other field is
imported) the \t is printed.

An other small bug in the README:
-s start
              Specify  the  first record-number in the xBase-file
              we will insert.
should be
-e start
              Specify  the  first record-number in the xBase-file
              we will insert.

Thomas Behr

contrib/dbase/README.dbf2pg
contrib/dbase/dbf2pg.1
contrib/dbase/dbf2pg.c

index 7203be4029b14de0984edc28e25ebb1dd13c938a..715481965506072dd47dc78c7b578ee519c97ddd 100644 (file)
@@ -12,7 +12,7 @@ SYNOPSIS
        "dbf2pg [options] dbf-file"
        Options:
        [-v[v]] [-f] [-u | -l] [-c | -D] [-d database] [-t  table]
-       [-h   host]   [-s  oldname=newname[,oldname=newname]]  [-s
+       [-h   host]   [-s  oldname=[newname][,oldname=[newname]]]  [-b
        start] [-e end] [-W] [-U username]  [-B transaction_size]
        [-F charset_from [-T charset_to]]
 
@@ -70,15 +70,19 @@ DESCRIPTION
 dbf2sql(1L)                                          dbf2sql(1L)
 
 
-       -s oldname=newname[,oldname=newname]
+       -s oldname=[newname][,oldname=[newname]]
              Change the name of a field from oldname to newname.
              This  is  mainly  used to avoid using reserved SQL-
-             keywords. Example:
-             -s SELECT=SEL,COMMIT=doit
+             keywords.  When the new fieldname is empty, the field
+             is skipped in both the CREATE-clause and the
+             INSERT-clauses, in common words: it will not be present
+             in the SQL-table.
+                 Example:
+             -s SELECT=SEL,remark=,COMMIT=doit
              This is done  before  the  -f  operator  has  taken
              effect!
 
-       -s start
+       -b start
              Specify  the  first record-number in the xBase-file
              we will insert.
 
index a377e489c831f049db7280e4154c312dff3ea910..e62d3323b59cefe525e68ce861097c0bb50d8a05 100644 (file)
@@ -8,8 +8,8 @@ dbf2sql \- Insert xBase\-style .dbf\-files into a PostgreSQL\-table
 Options:
 .br
 [-v[v]] [-f] [-u | -l] [-c | -D] [-d database] [-t table]
-[-h host] [-s oldname=newname[,oldname=newname]]
-[-s start] [-e end] [-W] [-U username] [-B transaction_size]
+[-h host] [-s oldname=[newname][,oldname=[newname]]]
+[-b start] [-e end] [-W] [-U username] [-B transaction_size]
 [-F charset_from [-T charset_to]]
 
 .SH DESCRIPTION
@@ -78,7 +78,7 @@ the
 .IR -f
 operator has taken effect!
 .TP
-.I "-s start"
+.I "-b start"
 Specify the first record-number in the xBase-file we will insert.
 .TP
 .I "-e end"
index b57b5c76885c392100e0b1bff976ec58e805de61..0ae53cd126d48a51426dcd134c590d98cd9d3655 100644 (file)
@@ -194,7 +194,7 @@ usage(void)
        printf("dbf2pg\n"
                   "usage: dbf2pg [-u | -l] [-h hostname] [-W] [-U username]\n"
                   "              [-B transaction_size] [-F charset_from [-T charset_to]]\n"
-                  "              [-s oldname=newname[,oldname=newname[...]]] [-d dbase]\n"
+                  "              [-s oldname=[newname][,oldname=[newname][...]]] [-d dbase]\n"
                   "              [-t table] [-c | -D] [-f] [-v[v]] dbf-file\n");
 }
 
@@ -359,6 +359,7 @@ do_inserts(PGconn *conn, char *table, dbhead * dbh)
        field      *fields;
        int                     i,
                                h,
+                               j,
                                result;
        char       *query,
                           *foo;
@@ -442,12 +443,19 @@ do_inserts(PGconn *conn, char *table, dbhead * dbh)
                if (result == DBF_VALID)
                {
                        query[0] = '\0';
+                       j = 0; /* counter for fields in the output */
                        for (h = 0; h < dbh->db_nfields; h++)
                        {
-                               if (!strlen(fields[h].db_name))
+                               if (!strlen(fields[h].db_name)) /* When the new fieldname is empty, the field is skipped */
+                               {
                                        continue;
+                               }
+                               else
+                               {
+                                       j++;
+                               }
 
-                               if (h != 0)             /* not for the first field! */
+                               if (j > 1)              /* not for the first field! */
                                        strcat(query, "\t");            /* COPY statement field
                                                                                                 * separator */