[pgbr-geral] PostgreSQL 8.3 + Windows + Tipos de finidos pelo usuário (em C)

2008-05-02 Thread Leonel Freire
Alguém já conseguiu criar tipos definidos pelo usuário com essa combinação?
Estou usando um arquivo simples, extraído da documentação, apenas para
testar:

### complex.c

#include 
#include 
#include 

PG_MODULE_MAGIC;

typedef struct Complex {
double  x;
double  y;
} Complex;

PG_FUNCTION_INFO_V1(complex_in);

Datum
complex_in(PG_FUNCTION_ARGS)
{
char   *str = PG_GETARG_CSTRING(0);
double  x,
y;
Complex*result;

if (sscanf(str, " ( %lf , %lf )", &x, &y) != 2)
ereport(ERROR,
(errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
 errmsg("invalid input syntax for complex: \"%s\"",
str)));

result = (Complex *) palloc(sizeof(Complex));
result->x = x;
result->y = y;
PG_RETURN_POINTER(result);
}

PG_FUNCTION_INFO_V1(complex_out);

Datum
complex_out(PG_FUNCTION_ARGS)
{
Complex*complex = (Complex *) PG_GETARG_POINTER(0);
char   *result;

result = (char *) palloc(100);
snprintf(result, 100, "(%g,%g)", complex->x, complex->y);
PG_RETURN_CSTRING(result);
}

###

Gero a DLL com o MinGW, executo as funções para criar os tipos etc, crio uma
tabela com o tipo recém definido, mas toda vez que tenho uma operação de
INSERT recebo a seguinte mensagem:

server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
The connection to the server was lost. Attempting reset: Failed.

Olhei o log do servidor e encontrei o seguinte:

2008-05-03 00:19:26 BRT LOG:  server process (PID 760) was terminated by
exception 0xC005
2008-05-03 00:19:26 BRT HINT:  See C include file "ntstatus.h" for a
description of the hexadecimal value.
2008-05-03 00:19:26 BRT LOG:  terminating any other active server processes
2008-05-03 00:19:27 BRT LOG:  all server processes terminated;
reinitializing
2008-05-03 00:19:28 BRT FATAL:  pre-existing shared memory block is still in
use
2008-05-03 00:19:28 BRT HINT:  Check if there are any old server processes
still running, and terminate them.

E dentro do ntstatus.h:

#define STATUS_ACCESS_VIOLATION ((NTSTATUS)0xC005L).

Alguém tem alguma idéia?

Leonel Freire
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] PostgreSQL 8.3 + Windows + Tipos de finidos pelo usuário (em C)

2008-05-03 Thread Euler Taveira de Oliveira
Leonel Freire wrote:

> Alguém já conseguiu criar tipos definidos pelo usuário com essa 
> combinação? Estou usando um arquivo simples, extraído da documentação, 
> apenas para testar:
> 
Você parece *não* ter copiado todas as funções necessárias para o novo 
tipo funcionar. Onde está a complex_recv() e a complex_send()? Sugiro 
que copie o código de src/tutorial/complex.c na íntegra e siga os passos 
de compilação [1] (somente para *nix) e depois utilize o 
src/tutorial/complex.source para criar as funções de apoio ao tipo, o 
tipo, operadores, agregações e cia.


[1] http://www.postgresql.org/docs/8.3/static/xfunc-c.html#DFUNC

-- 
   Euler Taveira de Oliveira
   http://www.timbira.com/
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] PostgreSQL 8.3 + Windows + Tipos de finidos pelo usuário (em C)

2008-05-06 Thread Leonel Freire
Executei todos os passos, inclusive utilizando o arquivo complex.c obtido
através dos fontes do PGSQL. Os passos encontrados dentro de complex.source
também foram corretamente executados. Gerei a DLL com o seguinte comando:

$ gcc -c complex.c -I/c/Arquivos\ de\ programas/PostgreSQL/8.3/include
-I/c/Arquivos\ de\ programas/PostgreSQL/8.3/include/server/ -I/c/Arquivos\
de\ programas/PostgreSQL/8.3/include/server/port/win32
$ gcc -shared -o complex.dll complex.o -L/c/Arquivos\ de\
programas/PostgreSQL/8.3/lib -lpostgres -Wl,--out-implib,libcomplex.a

Utilizei a postgres.lib por que foi a única "biblioteca" que supriu os
símbolos que estavam faltando.

No fim das contas, continuo com o mesmo problema. ;o)


2008/5/3 Euler Taveira de Oliveira <[EMAIL PROTECTED]>:

> Leonel Freire wrote:
>
> > Alguém já conseguiu criar tipos definidos pelo usuário com essa
> > combinação? Estou usando um arquivo simples, extraído da documentação,
> > apenas para testar:
> >
> Você parece *não* ter copiado todas as funções necessárias para o novo
> tipo funcionar. Onde está a complex_recv() e a complex_send()? Sugiro
> que copie o código de src/tutorial/complex.c na íntegra e siga os passos
> de compilação [1] (somente para *nix) e depois utilize o
> src/tutorial/complex.source para criar as funções de apoio ao tipo, o
> tipo, operadores, agregações e cia.
>
>
> [1] http://www.postgresql.org/docs/8.3/static/xfunc-c.html#DFUNC
>
> --
>   Euler Taveira de Oliveira
>   http://www.timbira.com/
> ___
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>



-- 
Leonel Freire
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] PostgreSQL 8.3 + Windows + Tipos de finidos pelo usuário (em C)

2008-05-06 Thread Leonel Freire
E eu pensei que as funções *_recv() e *_send() fossem opcionais. ;oP

2008/5/6 Leonel Freire <[EMAIL PROTECTED]>:

> Executei todos os passos, inclusive utilizando o arquivo complex.c obtido
> através dos fontes do PGSQL. Os passos encontrados dentro de complex.source
> também foram corretamente executados. Gerei a DLL com o seguinte comando:
>
> $ gcc -c complex.c -I/c/Arquivos\ de\ programas/PostgreSQL/8.3/include
> -I/c/Arquivos\ de\ programas/PostgreSQL/8.3/include/server/ -I/c/Arquivos\
> de\ programas/PostgreSQL/8.3/include/server/port/win32
> $ gcc -shared -o complex.dll complex.o -L/c/Arquivos\ de\
> programas/PostgreSQL/8.3/lib -lpostgres -Wl,--out-implib,libcomplex.a
>
> Utilizei a postgres.lib por que foi a única "biblioteca" que supriu os
> símbolos que estavam faltando.
>
> No fim das contas, continuo com o mesmo problema. ;o)
>
>
> 2008/5/3 Euler Taveira de Oliveira <[EMAIL PROTECTED]>:
>
> Leonel Freire wrote:
> >
> > > Alguém já conseguiu criar tipos definidos pelo usuário com essa
> > > combinação? Estou usando um arquivo simples, extraído da documentação,
> > > apenas para testar:
> > >
> > Você parece *não* ter copiado todas as funções necessárias para o novo
> > tipo funcionar. Onde está a complex_recv() e a complex_send()? Sugiro
> > que copie o código de src/tutorial/complex.c na íntegra e siga os passos
> > de compilação [1] (somente para *nix) e depois utilize o
> > src/tutorial/complex.source para criar as funções de apoio ao tipo, o
> > tipo, operadores, agregações e cia.
> >
> >
> > [1] http://www.postgresql.org/docs/8.3/static/xfunc-c.html#DFUNC
> >
> > --
> >   Euler Taveira de Oliveira
> >   http://www.timbira.com/
> > ___
> > pgbr-geral mailing list
> > pgbr-geral@listas.postgresql.org.br
> > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
> >
>
>
>
> --
> Leonel Freire




-- 
Leonel Freire
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] PostgreSQL 8.3 + Windows + Tipos de finidos pelo usuário (em C)

2008-05-06 Thread Euler Taveira de Oliveira
Leonel Freire wrote:

> No fim das contas, continuo com o mesmo problema. ;o)
> 
Eu não utilizo Windows mas tenho a _impressão_ que isso pode estar 
ligado ao uso do gcc. No 8.3, o MSVC é responsável por gerar o binário 
que é distribuído. Você compilou o PostgreSQL utilizando Mingw ou você 
está utilizando o binário distribuído no postgresql.org? Você tentou 
compilar este arquivo utilizando o MSVC?


-- 
   Euler Taveira de Oliveira
   http://www.timbira.com/
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] PostgreSQL 8.3 + Windows + Tipos de finidos pelo usuário (em C)

2008-05-06 Thread Leonel Freire
Estou utilizando o binário e não tentei o MSVC. Pode ser realmente uma
incompatibilidade dos binários gerados pelos compiladores ou alguma coisa do
tipo. Não sei onde vou arrumar o MSVC, mas assim que puder vou realizar um
teste com ele e postar aqui o resultado. Obrigado pela ajuda e pelas dicas.
;o)

PS: Aproveitando, você sabe se é possível compilar o PostgreSQL, no Windows,
apenas com as ferramentas oferecidas pelo MinGW e MSys? ;o)

2008/5/6 Euler Taveira de Oliveira <[EMAIL PROTECTED]>:

> Leonel Freire wrote:
>
> > No fim das contas, continuo com o mesmo problema. ;o)
> >
> Eu não utilizo Windows mas tenho a _impressão_ que isso pode estar
> ligado ao uso do gcc. No 8.3, o MSVC é responsável por gerar o binário
> que é distribuído. Você compilou o PostgreSQL utilizando Mingw ou você
> está utilizando o binário distribuído no postgresql.org? Você tentou
> compilar este arquivo utilizando o MSVC?
>
>
> --
>Euler Taveira de Oliveira
>   http://www.timbira.com/
> ___
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>



-- 
Leonel Freire
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] PostgreSQL 8.3 + Windows + Tipos de finidos pelo usuário (em C)

2008-05-06 Thread Euler Taveira de Oliveira
Leonel Freire wrote:

> Estou utilizando o binário e não tentei o MSVC. Pode ser realmente uma 
> incompatibilidade dos binários gerados pelos compiladores ou alguma 
> coisa do tipo. Não sei onde vou arrumar o MSVC, mas assim que puder vou 
> realizar um teste com ele e postar aqui o resultado. Obrigado pela ajuda 
> e pelas dicas. ;o)
> 
O MSVC Express é gratuito [1] (é uma versão limitada mas eu acho que dá 
para compilar o pg sem problemas).

> PS: Aproveitando, você sabe se é possível compilar o PostgreSQL, no 
> Windows, apenas com as ferramentas oferecidas pelo MinGW e MSys? ;o)
> 
Sim, o PostgreSQL para Windows pode ser compilado tanto no Mingw quanto 
no MSVC; o MSVC passou a ser o padrão por gerar um binário mais _rápido_ 
e "compatível" com a plataforma Windows (isso é o que os hackers do pg 
para windows dizem -- particularmente, não cheguei a fazer testes com 
essa plataforma).

[1] http://www.microsoft.com/express/vc/


-- 
   Euler Taveira de Oliveira
   http://www.timbira.com/
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral