Date: Sat, 31 Jan 2004 05:06:48 +0100 From: Palle Girgensohn <girgen@pingpong.net> To: Dan Langille <dan@langille.org> Cc: ports@freebsd.org Subject: Re: databases/postgresql7 dump + restore didn't include pgcrypto functions Message-ID: <72570000.1075522008@palle.girgensohn.se> In-Reply-To: <401AC855.2067.177977F8@localhost> References: <401AC855.2067.177977F8@localhost>
next in thread | previous in thread | raw e-mail | index | archive | help
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@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?72570000.1075522008>