Trouble with C-Language Functions

Поиск
Список
Период
Сортировка
От Sergei Koveshnikov
Тема Trouble with C-Language Functions
Дата
Msg-id 200406242113.38719.acrobat@eurocom.od.ua
обсуждение исходный текст
Ответы Re: Trouble with C-Language Functions
Список pgsql-bugs
Hello to everyone!
I've got some troubles with C-Language Functions.

I wrote simple shared library:
/*=========== dbsync.c ======================*/
#include <stdio.h>
#include <syslog.h>
#include "postgres.h"
#include "fmgr.h"
#include "libpq-fe.h"
/*
CREATE OR REPLACE FUNCTION dbsync_delete() RETURNS int
       AS '/usr/local/pgsql/lib/dbsync','dbsync_delete'
       LANGUAGE C STRICT;
*/

static PGconn* db;

int connect() {
  const char *dbinfo;
  dbinfo = "hostaddr=127.0.0.1 port=5432 dbname=test user=some_user
password=some_password";
  db = PQconnectdb(dbinfo);
  if(PQstatus(db) != CONNECTION_OK) {
    syslog(LOG_PID|LOG_ERR, "Connection to database '%s' failed.\n",
PQdb(db));
    syslog(LOG_PID|LOG_ERR, "%s", PQerrorMessage(db));
    return(-1);
  }
  return(0);
};

void disconnect() {
  PQfinish(db);
};

PG_FUNCTION_INFO_V1(dbsync_delete);
Datum
dbsync_delete(PG_FUNCTION_ARGS) {
  openlog("dbsync", LOG_PID, LOG_ERR);
  if(connect() == -1) {
    syslog(LOG_PID|LOG_ERR, "Error during connection to the DB.\n");
    PG_RETURN_NULL();
  }
  PGresult* res;
  res = PQexec(db, "BEGIN TRANSACTION");
  res = PQexec(db, "DELETE FROM test1 WHERE val=1");
  res = PQexec(db, "COMMIT TRANSACTION");
  syslog(LOG_PID|LOG_ERR, "OK.\n");
  disconnect();
  closelog();
  PG_RETURN_NULL();
};
/*=================================*/

Then I compiled it:

cd /home/acrobat/dbsync/
make -k
rm -f dbsync.so
gcc -c -fPIC -o dbsync.o dbsync.c \
        -I/usr/local/pgsql/include \
        -I/usr/local/src/postgresql-7.4.3/src/include/
gcc -shared -fPIC -o dbsync.so dbsync.o -L/usr/local/pgsql/lib -L. -lpq
cp dbsync.so /usr/local/pgsql/lib

Compilation finished at Thu Jun 24 20:57:01

Then I created FUNCTION:
test=# CREATE OR REPLACE FUNCTION dbsync_delete() RETURNS int AS
'/usr/local/pgsql/lib/dbsync','dbsync_delete' LANGUAGE C STRICT;

CREATE FUNCTION

And tried to use it:


test=# SELECT dbsync_delete();
 dbsync_delete
---------------

(1 row)

And in the log file I saw:
====================================

Jun 24 21:07:01 relay3 postgres[26968]: [16-1] LOG:  statement: SELECT
dbsync_delete();
Jun 24 21:07:01 relay3 dbsync[26968]: Connection to database 'test' failed.
Jun 24 21:07:01 relay3 dbsync[26968]: could not create socket: Too many open
files
Jun 24 21:07:01 relay3 dbsync[26968]: Connection to database 'test' failed.
Jun 24 21:07:01 relay3 dbsync[26968]: could not connect to server: Too many
open files ^IIs the server running on host "127.0.0.1" and accepting ^ITCP/IP
connections on port 5432?
Jun 24 21:07:01 relay3 dbsync[26968]: Connection to database 'test' failed.
Jun 24 21:07:01 relay3 dbsync[26968]: could not connect to server: Too many
open files ^IIs the server running on host "127.0.0.1" and accepting ^ITCP/IP
connections on port 5432?
Jun 24 21:07:01 relay3 dbsync[26968]: Connection to database 'test' failed.
Jun 24 21:07:01 relay3 dbsync[26968]: could not connect to server: Too many
open files ^IIs the server running on host "127.0.0.1" and accepting ^ITCP/IP
connections on port 5432?
...
...
... A LOT OF SAME STRINGS ...
...
...
Jun 24 21:07:01 relay3 dbsync[26968]: Connection to database 'test' failed.
Jun 24 21:07:01 relay3 dbsync[26968]: could not connect to server: Too many
open files ^IIs the server running on host "127.0.0.1" and accepting ^ITCP/IP
connections on port 5432?
Jun 24 21:07:01 relay3 dbsync[26968]: Error during connection to the DB.
Jun 24 21:07:01 relay3 dbsync[26968]: [17-1] LOG:  duration: 231.663 ms
====================================

What's the matter? Where I've been wrong?

I use:
PostgreSQL 7.4.3
Linux MyHost 2.4.24 #1 SMP Wed Feb 11 13:39:32 EET 2004 i686 GNU/Linux
gcc version 3.2.3

Thank you!
--
Best regards,
Sergei Koveshnikov.

В списке pgsql-bugs по дате отправления:

Предыдущее
От: Alvaro Herrera
Дата:
Сообщение: Re: Dump/Restore of cvs regression database gives invalid timestamp syntax error
Следующее
От: Sean McCune
Дата:
Сообщение: Problem with now() on 7.4.1-3 under cygwin?