Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 31 Jan 2004 07:40:39 -0500
From:      "Dan Langille" <dan@langille.org>
To:        Palle Girgensohn <girgen@pingpong.net>
Cc:        ports@freebsd.org
Subject:   Re: databases/postgresql7 dump + restore didn't include pgcrypto functions
Message-ID:  <401B5BF7.437.19BA2FB0@localhost>
In-Reply-To: <72570000.1075522008@palle.girgensohn.se>
References:  <401AC855.2067.177977F8@localhost>

next in thread | previous in thread | raw e-mail | index | archive | help
On 31 Jan 2004 at 5:06, Palle Girgensohn wrote:

> Hi Dan,
> 
> undefined symbol "elog"... From what I can see in the error message below, 
> the pgcrypto.so file was not missing, but the symbol "elog" in pgcrypto.so 
> was not found. Did you update the databases/postgresql-contrib port when 
> updating databases-postgresql7? Seems likely that a 7.3.* pgcrypto.so might 
> not accept a postgresql-7.4 environment.

I did not update the databases/postgresql-contrib port.  I didn't use 
that port at all. I installed from the contrib/pgcrypo subdirectory 
under databases/posgresql7.

> ... checking... Hmm... the elog function is not in the postgres binary 
> anymore. This is most likely the problem. I am not a linker wizard, but 
> browsing the different binaries gives me a clue:
> 
> pg-7.4 system $ nm -D /usr/local/bin/postgres | grep elog
> 0818e100 T elog
> 081015bc T elog_node_display
> 
> pg-7.3 system $ nm -D /usr/local/bin/postgres | grep elog
> 081ac188 T elog_finish
> 08116e28 T elog_node_display
> 
> If I'm not wrong, this means that postgresql functions, at least those 
> programmed in C and using elog, must be rebuilt when updating the server 
> 7.3 -> 7.4.

OK, let's confirm that with the PostgreSQL hackers.  I'll do that if 
you wish.

> Perhaps adding a reminder somewhere could help. Any suggestions as to where 
> to put such a reminder?

How about an echo in the Makefile?

> 
> /Palle
> 
> --On fredag, januari 30, 2004 21.10.45 -0500 Dan Langille 
> <dan@langille.org> wrote:
> 
> > Hi folks,
> >
> > I upgraded two servers today from 7.3.* to 7.4.1.  In both cases, the
> > pgcrypto functions were excluded.  I used pg_dumpall to create the
> > output.  Examining the dump file I see this:
> >
> > connect "working-copy.freshports.org"
> > --
> > -- PostgreSQL database dump
> > --
> >
> > SET SESSION AUTHORIZATION 'dan';
> >
> > SET search_path = public, pg_catalog;
> >
> > --
> > -- TOC entry 235 (OID 19127468)
> > -- Name: digest (text, text); Type: FUNCTION; Schema: public; Owner:
> > dan
> > --
> >
> > CREATE FUNCTION digest (text, text) RETURNS bytea
> >     AS '$libdir/pgcrypto', 'pg_digest'
> >     LANGUAGE c;
> >
> > But within that database, there is no digest function:
> >
> > working-copy.freshports.org=# \df digest
> >                    List of functions
> >  Result data type | Schema | Name | Argument data types
> > ------------------+--------+------+---------------------
> > (0 rows)
> >
> > working-copy.freshports.org=#
> >
> > The cause of the problem is illustrated by this attempt to manually
> > create the functions:
> >
> > freshports=# CREATE FUNCTION digest (text, text) RETURNS bytea
> > freshports-#     AS '$libdir/pgcrypto', 'pg_digest'
> > freshports-#     LANGUAGE c;
> > ERROR:  could not load library
> > "/usr/local/lib/postgresql/pgcrypto.so": dlopen
> > '/usr/local/lib/postgresql/pgcrypto.so' failed. (/us
> > r/local/lib/postgresql/pgcrypto.so: Undefined symbol "elog")
> >
> > It appears that the libraries were removed.  Does that make sense?
> >
> > I upgraded using portupgrade.  I wonder if that's why
> > /usr/local/lib/postgresql was blown away....
> >
> > What I had to do was recompile and install contrib/pgcrypto and then
> > import the functions.
> >
> > FWIW: I was using the FreeBSD port on 4.9-STABLE.

-- 
Dan Langille : http://www.langille.org/
BSDCan - http://www.bsdcan.org/



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?401B5BF7.437.19BA2FB0>