COPY commands could use an enhancement.

Started by Alfred Perlsteinover 24 years ago10 messages
#1Alfred Perlstein
bright@wintelcom.net

It would be very helpful if the COPY command could be expanded
in order to provide positional parameters.

I noticed that it didn't a while back and it can really hurt
someone when they happen to try to use pg_dump to move data
from one database to another database and they happened to
create the feilds in the tables in different orders.

Basically:
COPY "webmaster" FROM stdin;

could become:
COPY "webmaster" FIELDS "id", "name", "ssn" FROM stdin;

this way when sourcing it would know where to place the
feilds.

--
-Alfred Perlstein - [alfred@freebsd.org]
Daemon News Magazine in your snail-mail! http://magazine.daemonnews.org/

#2Joel Burton
jburton@scw.org
In reply to: Alfred Perlstein (#1)
Re: COPY commands could use an enhancement.

On Mon, 30 Apr 2001, Alfred Perlstein wrote:

Basically:
COPY "webmaster" FROM stdin;

could become:
COPY "webmaster" FIELDS "id", "name", "ssn" FROM stdin;

We'd need some way of making field name dumping optional, because
one of the nice things about not having the field names appear is that
I can dump, change the field names, and re-slurp in the old dump.

--
Joel Burton <jburton@scw.org>
Director of Information Systems, Support Center of Washington

#3Alfred Perlstein
bright@wintelcom.net
In reply to: Joel Burton (#2)
Re: COPY commands could use an enhancement.

* Joel Burton <jburton@scw.org> [010430 06:26] wrote:

On Mon, 30 Apr 2001, Alfred Perlstein wrote:

Basically:
COPY "webmaster" FROM stdin;

could become:
COPY "webmaster" FIELDS "id", "name", "ssn" FROM stdin;

We'd need some way of making field name dumping optional, because
one of the nice things about not having the field names appear is that
I can dump, change the field names, and re-slurp in the old dump.

Of course!

I meant this as an additional option, not as a replacement.

--
-Alfred Perlstein - [alfred@freebsd.org]
Daemon News Magazine in your snail-mail! http://magazine.daemonnews.org/

#4Tom Lane
tgl@sss.pgh.pa.us
In reply to: Alfred Perlstein (#1)
Re: COPY commands could use an enhancement.

Alfred Perlstein <bright@wintelcom.net> writes:

It would be very helpful if the COPY command could be expanded
in order to provide positional parameters.

I think it's a bad idea to try to expand COPY into a full-tilt data
import/conversion utility, which is the direction that this sort of
suggestion is headed in. COPY is designed as a simple, fast, reliable,
low-overhead data transfer mechanism for backup and restore. The more
warts we add to it, the less well it will serve that purpose.

Example: if we allow selective column import, what do we do with missing
columns? Must COPY now be able to handle insertion of default-value
expressions?

I think it'd be better to put effort into an external data translation
utility that can deal with column selection, data reformatting, CR/LF
conversion, and all those other silly little issues that come up when
you need to move data from one DBMS to another. Sure, we could make
the backend do some of this stuff, but it'd be more maintainable as a
separate program ... IMHO anyway. I think that pgaccess and pgadmin
already have some capability in this line, BTW.

regards, tom lane

#5Alfred Perlstein
bright@wintelcom.net
In reply to: Tom Lane (#4)
Re: COPY commands could use an enhancement.

* Tom Lane <tgl@sss.pgh.pa.us> [010430 08:37] wrote:

Alfred Perlstein <bright@wintelcom.net> writes:

It would be very helpful if the COPY command could be expanded
in order to provide positional parameters.

I think it's a bad idea to try to expand COPY into a full-tilt data
import/conversion utility, which is the direction that this sort of
suggestion is headed in. COPY is designed as a simple, fast, reliable,
low-overhead data transfer mechanism for backup and restore. The more
warts we add to it, the less well it will serve that purpose.

Honestly it would be hard for COPY to be any more less serving of
people's needs, it really makes sense for it to be able to parse
positional paramters for both speed and correctness.

Example: if we allow selective column import, what do we do with missing
columns?

What is already done, if you initiate a copy into a 5 column table
using only 4 columns of copy data the fifth is left empty.

Must COPY now be able to handle insertion of default-value
expressions?

No, copy should be what it is simple but at the same time useful
enough for bulk transfer without painful contortions and fear
of modifying tables.

--
-Alfred Perlstein - [alfred@freebsd.org]
Represent yourself, show up at BABUG http://www.babug.org/

#6Bruce Momjian
pgman@candle.pha.pa.us
In reply to: Tom Lane (#4)
Re: COPY commands could use an enhancement.

Alfred Perlstein <bright@wintelcom.net> writes:

It would be very helpful if the COPY command could be expanded
in order to provide positional parameters.

I think it's a bad idea to try to expand COPY into a full-tilt data
import/conversion utility, which is the direction that this sort of
suggestion is headed in. COPY is designed as a simple, fast, reliable,
low-overhead data transfer mechanism for backup and restore. The more
warts we add to it, the less well it will serve that purpose.

What is really cool is Informix's UNLOAD/LOAD commands. It combines
COPY with SELECT/INSERT:

UNLOAD TO '/tmp/x'
SELECT * FROM tab

and LOAD is similar:

LOAD FROM '/tmp/x'
INSERT INTO TAB

This leverages SELECT and INSERT's column and WHERE capabilities to do
almost anything you want with flat files. I think it is superior to our
COPY.

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
#7Fernando Nasser
fnasser@redhat.com
In reply to: Alfred Perlstein (#1)
Re: COPY commands could use an enhancement.

Karen saw me importing data into a database using pgaccess.

Again, this could be useful to someone that it is not a "superuser".
But only superusers can use pgaccess. What a shame :-(

Fernando

P.S.: pgaccess has a much more limited import facility - only text files
and you can only change the delimiter. But it can be expanded.

Tom Lane wrote:

Alfred Perlstein <bright@wintelcom.net> writes:

It would be very helpful if the COPY command could be expanded
in order to provide positional parameters.

I think it's a bad idea to try to expand COPY into a full-tilt data
import/conversion utility, which is the direction that this sort of
suggestion is headed in. COPY is designed as a simple, fast, reliable,
low-overhead data transfer mechanism for backup and restore. The more
warts we add to it, the less well it will serve that purpose.

Example: if we allow selective column import, what do we do with missing
columns? Must COPY now be able to handle insertion of default-value
expressions?

I think it'd be better to put effort into an external data translation
utility that can deal with column selection, data reformatting, CR/LF
conversion, and all those other silly little issues that come up when
you need to move data from one DBMS to another. Sure, we could make
the backend do some of this stuff, but it'd be more maintainable as a
separate program ... IMHO anyway. I think that pgaccess and pgadmin
already have some capability in this line, BTW.

regards, tom lane

---------------------------(end of broadcast)---------------------------
TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org

--
Fernando Nasser
Red Hat Canada Ltd. E-Mail: fnasser@redhat.com
2323 Yonge Street, Suite #300
Toronto, Ontario M4P 2C9

#8Joel Burton
jburton@scw.org
In reply to: Tom Lane (#4)
Re: COPY commands could use an enhancement.

On Mon, 30 Apr 2001, Tom Lane wrote:

I think it'd be better to put effort into an external data translation
utility that can deal with column selection, data reformatting, CR/LF
conversion, and all those other silly little issues that come up when
you need to move data from one DBMS to another. Sure, we could make
the backend do some of this stuff, but it'd be more maintainable as a
separate program ... IMHO anyway. I think that pgaccess and pgadmin
already have some capability in this line, BTW.

Real conversion should happen in userland.

However, allowing people to COPY in a different order does prevent a
userland tool from having to re-arrange a dump file. (Of course, really,
with perl, re-ordering a dump file should take more than a few lines
anyway.)

Are there any generalized tools for re-ordering delimited columns, without
having to use sed/perl/regexes, etc.?

If people can point to some best practices/ideas, I'd be happy to turn
them into a HOWTO.

--
Joel Burton <jburton@scw.org>
Director of Information Systems, Support Center of Washington

#9Philip Warner
pjw@rhyme.com.au
In reply to: Tom Lane (#4)
Re: COPY commands could use an enhancement.

At 11:36 30/04/01 -0400, Tom Lane wrote:

COPY is designed as a simple, fast, reliable,
low-overhead data transfer mechanism for backup and restore. The more
warts we add to it, the less well it will serve that purpose.

Do you have a alternate suggestion as to how to solve the problems it has
backing up the regression DB?

----------------------------------------------------------------
Philip Warner | __---_____
Albatross Consulting Pty. Ltd. |----/ - \
(A.B.N. 75 008 659 498) | /(@) ______---_
Tel: (+61) 0500 83 82 81 | _________ \
Fax: (+61) 0500 83 82 82 | ___________ |
Http://www.rhyme.com.au | / \|
| --________--
PGP key available upon request, | /
and from pgp5.ai.mit.edu:11371 |/

#10Tom Lane
tgl@sss.pgh.pa.us
In reply to: Philip Warner (#9)
Re: COPY commands could use an enhancement.

Philip Warner <pjw@rhyme.com.au> writes:

Do you have a alternate suggestion as to how to solve the problems it has
backing up the regression DB?

One possibility is to fix ALTER TABLE ADD COLUMN to maintain the same
column ordering in parents and children.

COPY with specified columns may in fact be the best way to deal with
that particular issue, if pg_dump is all we care about fixing. However
there are a bunch of things that have a problem with it, not only
pg_dump. See thread over in committers about functions and inheritance.

regards, tom lane