Обсуждение: 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