trouble migrating from 6.3.2 (IRIX) to 7.0.2 (Linux)
I'm trying to migrate from PostgreSQL 6.3.2 under IRIX to version
7.0.2 under RedHat 7.0. I've dumped my old database with
"pg_dumpall -o > db.backup", but I'm having problems restoring this
data to the new machine. I'm using "psql -d template1 < db.backup" to
restore the data, but I'm getting parse errors from psql:
You are now connected to database template1.
SELECT
DELETE 0
DROP
You are now connected to database template1 as user postgres.
CREATE DATABASE
You are now connected to database armhold as user postgres.
CREATE
DROP
You are now connected as new user armhold.
psql:/home/armhold/db.backup:13: ERROR: parser: parse error at or near "-"
psql:/home/armhold/db.backup:14: ERROR: Relation 'pfam' does not exist
psql:/home/armhold/db.backup:20: invalid command \.
I get similar results if I dump the individual databases one by one.
I'm running the stock Postgres install that comes with Redhat 7. I've
applied all the available errata patches for Redhat. Should I expect
this to work, moving from IRIX to Linux, and from
Postgres 6.3.2 to 7.0.2 at the same time?
Thanks for any help.
--
George Armhold
Rutgers University
Bioinformatics Initiative
George Armhold <armhold@cs.rutgers.edu> writes:
psql:/home/armhold/db.backup:13: ERROR: parser: parse error at or near "-"
psql:/home/armhold/db.backup:14: ERROR: Relation 'pfam' does not exist
psql:/home/armhold/db.backup:20: invalid command \.
So, how about showing us the first 20 or so lines of db.backup? You
can't really expect us to guess much from this amount of info ...
regards, tom lane
Tom Lane wrote:
So, how about showing us the first 20 or so lines of db.backup? You
can't really expect us to guess much from this amount of info ...
Fair enough question.
select datdba into table tmp_pg_shadow from pg_database where
datname = 't
emplate1';
delete from pg_shadow where usesysid <> tmp_pg_shadow.datdba;
drop table tmp_pg_shadow;
copy pg_shadow from stdin;
nobody 60001 f t f t \N \N
seabee 10481 t t f t \N \N
yueyue 5535 t t f t \N \N
hagerty 27458 t t f t \N \N
armhold 29124 t t t t mysql \N
seredin 60002 f t f t \N
aynur 5869 t t f t \N \N
\.
\connect template1 postgres
create database armhold;
\connect armhold postgres
CREATE TABLE pgdump_oid (dummy int4);
COPY pgdump_oid WITH OIDS FROM stdin;
691497 0
\.
DROP TABLE pgdump_oid;
CREATE TABLE pfam (swiss_id varchar(16) NOT NULL, pfam_family
varchar(32), comme
nt varchar(80), sequence_data varchar(-5));
COPY pfam WITH OIDS FROM stdin;
536960 SWISS1 pfam_family1 comment data.... ABCDEFGHJ
536962 SWISS2 pfam_family1 comment data.... ABCDEFGHJ
536963 SWISS3 pfam_family1 comment data.... ABCDEFGHJ
536964 SWISS4 pfam_family1 comment data.... ABCDEFGHJ
536966 SWISS5 pfam_family2 comment data.... ABCDEFGHJ
\.
CREATE UNIQUE INDEX pfam_pkey on pfam using btree ( swiss_id
varchar_ops );
\connect template1 armhold
create database yueyue_test;
\connect yueyue_test armhold
CREATE TABLE pgdump_oid (dummy int4);
COPY pgdump_oid WITH OIDS FROM stdin;
691529 0
\.
Thanks.
--
George Armhold
Rutgers University
Bioinformatics Initiative
George Armhold <armhold@cs.rutgers.edu> writes:
So, how about showing us the first 20 or so lines of db.backup? You
can't really expect us to guess much from this amount of info ...
Fair enough question.
CREATE TABLE pfam (swiss_id varchar(16) NOT NULL, pfam_family
varchar(32), comment varchar(80), sequence_data varchar(-5));
Hrm. varchar(-5) is pretty obviously broken :-(. I don't want to
guess what sort of aberration prompted that output from pg_dump
--- 6.3.2 is before my time with Postgres. Try editing the dump
file to have a more reasonable value for the varchar max width,
and see how it goes...
regards, tom lane
Tom Lane wrote:
CREATE TABLE pfam (swiss_id varchar(16) NOT NULL, pfam_family
varchar(32), comment varchar(80), sequence_data varchar(-5));Hrm. varchar(-5) is pretty obviously broken :-(. I don't want to guess what sort of aberration prompted that output from pg_dump --- 6.3.2 is before my time with Postgres. Try editing the dump file to have a more reasonable value for the varchar max width, and see how it goes...
Hmm, I seem to be getting negative values for tables that were created
without a maximum char length. Is (was) it legal postgres syntax to
say something like
create table foo (mytext varchar);
without a maximum length constraint? psql (or perhaps the Perl
interface) let me create such tables under 6.5.3 and they've worked
fine, up until this pg_dump. Would it be safe to simply edit the
dumped file, change the negative values to something reasonable and
reload the DB?
Thank you for your assistance.
--
George Armhold
Rutgers University
Bioinformatics Initiative
George Armhold <armhold@cs.rutgers.edu> writes:
Hmm, I seem to be getting negative values for tables that were created
without a maximum char length. Is (was) it legal postgres syntax to
say something like
create table foo (mytext varchar);
without a maximum length constraint?
It was and is, but it looks like 6.3.2's pg_dump did the wrong thing
with 'em. If you know that's how these fields were created, I'd say
that manually removing the (-5) from the table declarations is the
way to go.
regards, tom lane
Earlier in the week I was having problems moving from PG 6.3.2 under IRIX to
version 7.0.2 under Linux. I noticed that pg_dump was creating bogus
(negative value) entries for varchar fields that were initiallly created
with no maximum length constraint. Tom Lane suggested the following:
It was and is, but it looks like 6.3.2's pg_dump did the wrong thing
with 'em. If you know that's how these fields were created, I'd say
that manually removing the (-5) from the table declarations is the
way to go.
This fixed most of the problems. The one other thing I had to do was rename
a field "offset" to "my_offset" throughout all my tables. Apparently this
is a reserved word in the current version? I still have some more testing
to do, but I seem to have things working now. Thanks to the group, and Tom
Lane in particular.
"George Armhold" <armhold@cs.rutgers.edu> writes:
The one other thing I had to do was rename
a field "offset" to "my_offset" throughout all my tables. Apparently this
is a reserved word in the current version?
Yes, see LIMIT/OFFSET options in SELECT. You could still use it with
double-quotes around the name, but changing the column name is probably
less annoying in the long run...
regards, tom lane