[pgbr-geral] PostgreSQL 8.3 + Windows + Tipos de finidos pelo usuário (em C)
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)
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)
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)
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)
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)
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)
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