Help me!!! Pleass
PGHOME/src/tutorial/funcs.c .....
I compiled it by GCC ,but not excutable
command: gcc -fPIC -c funcs.c
ld -G -Bdynamic -o funcs.so funcs.o
I met errer mesage ==> " stat failed on file /../../../*.so"
++++++++
*******************************************************************************
QUERY: CREATE FUNCTION c_overpaid(EMP, int4) RETURNS bool
AS '/user1/grad/whtak/postgres/src/funcs.so' LANGUAGE 'c';
*******************************************************************************
press return to continue ..
CREATE
*******************************************************************************
QUERY: SELECT add_one(3) AS four;
*******************************************************************************
press return to continue ..
ERROR: stat failed on file /user1/grad/whtak/postgres/src/funcs.so
++++++
Let me know what means errer message.
Good Luck!!
.
Attachments:
funcs.capplication/x-unknown-content-type-c_auto_file; name=funcs.cDownload
/******************************************************************************
These are user-defined functions that can be bound to a Postgres backend
and called by Postgres to execute SQL functions of the same name.
The calling format for these functions is defined by the CREATE FUNCTION
SQL statement that binds them to the backend.
*****************************************************************************/
#include <string.h>
#include <stdio.h>
#include "postgres.h" /* for char16, etc. */
#include "utils/palloc.h" /* for palloc */
#include "libpq-fe.h" /* for TUPLE */
#include "executor/executor.h" /* for GetAttributeByName() */
/* The following prototypes declare what we assume the user declares to
Postgres in his CREATE FUNCTION statement.
*/
int add_one(int arg);
char16 *concat16(char16 *arg1, char16 *arg2);
text *copytext(text *t);
bool
c_overpaid(TUPLE t, /* the current instance of EMP */
int4 limit);
int
add_one(int arg)
{
return (arg + 1);
}
char16 *
concat16(char16 *arg1, char16 *arg2)
{
char16 *new_c16 = (char16 *) palloc(sizeof(char16));
MemSet(new_c16, 0, sizeof(char16));
strncpy((char *) new_c16, (char *) arg1, 16);
return (char16 *) (strncat((char *) new_c16, (char *) arg2, 16));
}
text *
copytext(text *t)
{
/*
* VARSIZE is the total size of the struct in bytes.
*/
text *new_t = (text *) palloc(VARSIZE(t));
MemSet(new_t, 0, VARSIZE(t));
VARSIZE(new_t) = VARSIZE(t);
/*
* VARDATA is a pointer to the data region of the struct.
*/
memcpy((void *) VARDATA(new_t), /* destination */
(void *) VARDATA(t), /* source */
VARSIZE(t) - VARHDRSZ); /* how many bytes */
return (new_t);
}
bool
c_overpaid(TUPLE t, /* the current instance of EMP */
int4 limit)
{
bool isnull = false;
int4 salary;
salary = (int4) GetAttributeByName(t, "salary", &isnull);
if (isnull)
return (false);
return (salary > limit);
}
Woohyun,Tak wrote:
PGHOME/src/tutorial/funcs.c .....
I compiled it by GCC ,but not excutable
command: gcc -fPIC -c funcs.c
ld -G -Bdynamic -o funcs.so funcs.oI met errer mesage ==> " stat failed on file /../../../*.so"
Please cut the complete filename in this message (starting at the first
"/") and do an ls -l on it. "Can't stat" means that there is either no
file at the specied location or it is unreadable to the backend which
runs as "postgres".
Gene