Обсуждение: C Function problems
I have trouble creating C functions especially when using some C native code
For example, the following code works:
#include "/usr/include/postgresql/8.4/server/postgres.h"
#include <stdlib.h>
#include <stdio.h>
#include "/usr/include/postgresql/8.4/server/fmgr.h"
#ifdef PG_MODULE_MAGIC
PG_MODULE_MAGIC;
#endif
PG_FUNCTION_INFO_V1(Create_Future_Records);
Datum Create_Future_Records(PG_FUNCTION_ARGS)
{
PG_RETURN_INT32(0);
}
However if I use the following code :
#include "/usr/include/postgresql/8.4/server/postgres.h"
#include <stdlib.h>
#include <stdio.h>
#include "/usr/include/postgresql/8.4/server/fmgr.h"
#ifdef PG_MODULE_MAGIC
PG_MODULE_MAGIC;
#endif
PG_FUNCTION_INFO_V1(Create_Future_Records);
Datum Create_Future_Records(PG_FUNCTION_ARGS)
{
char test[40];
PG_RETURN_INT32(0);
}
I get the following error when trying to create the function :
ERROR: could not find function "Create_Future_Records" in file
"/usr/lib/postgresql/8.4/lib/shared.so"
Here is the create function command used in both instances :
create function Create_Future_Records(text) RETURNS integer
as '/usr/lib/postgresql/8.4/lib/shared','Create_Future_Records'
LANGUAGE C STRICT;
I actually have some code that works but starts to have this same
problem when using things like system() or sprintf(); I have been back
tracking to see if I can find out why some things works and others do
not but do not understand this particular issue is a problem. Thanks in
advance.
K Scott
Kent Scott <kscott@logicalsi.com> writes:
> I have trouble creating C functions especially when using some C native code
> For example, the following code works:
> [ examples differing only in the addition of a local variable ]
> I get the following error when trying to create the function :
> ERROR: could not find function "Create_Future_Records" in file
> "/usr/lib/postgresql/8.4/lib/shared.so"
It's really hard to believe that those two examples work differently.
I think more likely you're up against some procedural error that you
are misinterpreting to suggest that adding an unused local variable
would really make a difference.
One thought that comes to mind is that as of recent releases, the
only way to load a modified .so into the backend is to start a fresh
session. So if you recompiled and then tried to do a CREATE FUNCTION
in a backend that had already loaded the previous version of the .so,
you could get an error like that. Any chance it's that?
regards, tom lane