Обсуждение: MAGIC_MODULE and libc

Поиск
Список
Период
Сортировка

MAGIC_MODULE and libc

От
"Jeff Amiel"
Дата:
I just upgraded to v8.2 and have an issue with one of my stored
proc/functions that worked under 8.1:

CREATE OR REPLACE FUNCTION getpid()
  RETURNS integer AS
'/lib/libc.so.6', 'getpid'
  LANGUAGE 'c' VOLATILE;

ERROR: incompatible library "/lib/libc.so.6": missing magic block
SQL state: XX000
Hint: Extension libraries are required to use the PG_MODULE_MAGIC macro.

I've added the appropriate macro to all my actual C code...but in this
case surely I am not expected to recompile libc...am I?  Is there an
easier way to get the pid of the current process?

Re: MAGIC_MODULE and libc

От
Alvaro Herrera
Дата:
Jeff Amiel wrote:
> I just upgraded to v8.2 and have an issue with one of my stored
> proc/functions that worked under 8.1:
>
> CREATE OR REPLACE FUNCTION getpid()
>  RETURNS integer AS
> '/lib/libc.so.6', 'getpid'
>  LANGUAGE 'c' VOLATILE;
>
> ERROR: incompatible library "/lib/libc.so.6": missing magic block
> SQL state: XX000
> Hint: Extension libraries are required to use the PG_MODULE_MAGIC macro.
>
> I've added the appropriate macro to all my actual C code...but in this
> case surely I am not expected to recompile libc...am I?  Is there an
> easier way to get the pid of the current process?

I'd use MyProcPid from #include "miscadmin.h"

--
Alvaro Herrera                                http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.

Re: MAGIC_MODULE and libc

От
Martijn van Oosterhout
Дата:
On Tue, Dec 19, 2006 at 08:20:23AM -0600, Jeff Amiel wrote:
> ERROR: incompatible library "/lib/libc.so.6": missing magic block
> SQL state: XX000
> Hint: Extension libraries are required to use the PG_MODULE_MAGIC macro.
>
> I've added the appropriate macro to all my actual C code...but in this
> case surely I am not expected to recompile libc...am I?  Is there an
> easier way to get the pid of the current process?

In general you should use a wrapper library, but in your case
pg_backend_pid() will do it.

Have a nice day,
--
Martijn van Oosterhout   <kleptog@svana.org>   http://svana.org/kleptog/
> From each according to his ability. To each according to his ability to litigate.

Вложения

Re: MAGIC_MODULE and libc

От
Jeff Amiel
Дата:
yup...
I did this
CREATE OR REPLACE FUNCTION getpid()
  RETURNS integer AS
$BODY$
DECLARE
   thepid integer;
BEGIN
select into thepid pg_backend_pid from pg_backend_pid();
return thepid;
END;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE;

thanks!!!


Martijn van Oosterhout wrote:
On Tue, Dec 19, 2006 at 08:20:23AM -0600, Jeff Amiel wrote: 
ERROR: incompatible library "/lib/libc.so.6": missing magic block
SQL state: XX000
Hint: Extension libraries are required to use the PG_MODULE_MAGIC macro.

I've added the appropriate macro to all my actual C code...but in this
case surely I am not expected to recompile libc...am I?  Is there an
easier way to get the pid of the current process?   
In general you should use a wrapper library, but in your case
pg_backend_pid() will do it.

Have a nice day,