databases/postgresql7 dump + restore didn't include pgcrypto
functions
Palle Girgensohn
girgen at pingpong.net
Fri Jan 30 20:06:54 PST 2004
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.
... 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.
Perhaps adding a reminder somewhere could help. Any suggestions as to where
to put such a reminder?
/Palle
--On fredag, januari 30, 2004 21.10.45 -0500 Dan Langille
<dan at 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/
>
More information about the freebsd-ports
mailing list