Normalement un message d'erre
Christophe Chauvet/ = 20 Avril, 2006 - 16:24
Normalement un message d'erreur doit être disponible dans le journal d'évènement.
Si oui quelle est t'il ?
Cordialement.
Christophe Chauvet
http://kryskool.org/
[ Vous devez
vous connecter pour poster des commentaires ]
Bonjour,
Voici le log du g
krizz/ = 21 Avril, 2006 - 14:30
Bonjour,
Voici le log du gestionnaire d'evenement windows :
Type de l'événement : Erreur
Source de l'événement : Application Error
Catégorie de l'événement : Aucun
ID de l'événement : 1000
Date : 21/04/2006
Heure : 14:24 ©red
Utilisateur : N/A
Ordinateur : TOTO
Description :
Application défaillante postgres.exe, version 8.1.3.6044, module défaillant postgres.exe, version 8.1.3.6044, adresse de défaillance 0x001c1e06.
Pour plus d'informations, consultez le centre Aide et support à l'adresse http://go.microsoft.com/fwlink/events.asp.
Données :
0000: 41 70 70 6c 69 63 61 74 Applicat
0008: 69 6f 6e 20 46 61 69 6c ion Fail
0010: 75 72 65 20 20 70 6f 73 ure pos
0018: 74 67 72 65 73 2e 65 78 tgres.ex
0020: 65 20 38 2e 31 2e 33 2e e 8.1.3.
0028: 36 30 34 34 20 69 6e 20 6044 in
0030: 70 6f 73 74 67 72 65 73 postgres
0038: 2e 65 78 65 20 38 2e 31 .exe 8.1
0040: 2e 33 2e 36 30 34 34 20 .3.6044
0048: 61 74 20 6f 66 66 73 65 at offse
0050: 74 20 30 30 31 63 31 65 t 001c1e
0058: 30 36 0d 0a 06..
le log de Dr.MinGW :
postgres.exe caused an Access Violation at location 005c1e06 in module postgres.exe Reading from location 00000130.
Registers:
eax=00000130 ebx=00000002 ecx=00afd160 edx=681017e7 esi=00000002 edi=015a4450
eip=005c1e06 esp=00afd088 ebp=00afd088 iopl=0 nv up ei pl nz na po nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000206
Call stack:
005C1E06 postgres.exe:005C1E06 pg_detoast_datum
681017FB ceipgsql.dll:681017FB concat_text ceipgsql.c:137
Datum concat_text(
FunctionCallInfo fcinfo = &(indirect)
)
005C1FEE postgres.exe:005C1FEE pg_detoast_datum
004C08D8 postgres.exe:004C08D8 ExecMakeFunctionResult
004C4272 postgres.exe:004C4272 ExecProject
004CE030 postgres.exe:004CE030 ExecResult
004BF440 postgres.exe:004BF440 ExecProcNode
004BE276 postgres.exe:004BE276 ExecutorRun
00547822 postgres.exe:00547822 PortalSetResultFormat
00547E0A postgres.exe:00547E0A PortalRun
0054409A postgres.exe:0054409A pg_parse_query
005455CB postgres.exe:005455CB PostgresMain
0051EE2A postgres.exe:0051EE2A SubPostmasterMain
004DD5DF postgres.exe:004DD5DF main
004011E7 postgres.exe:004011E7
00401238 postgres.exe:00401238
7C816D4F kernel32.dll:7C816D4F RegisterWaitForInputIdle
Voici mon code :
PG_FUNCTION_INFO_V1(concat_text);
Datum concat_text(PG_FUNCTION_ARGS)
{
text *arg1 = PG_GETARG_TEXT_P(0); // ICI LIGNE 137
text *arg2 = PG_GETARG_TEXT_P(1);
int32 new_text_size = VARSIZE(arg1) + VARSIZE(arg2) - VARHDRSZ;
text *new_text = (text *) palloc(new_text_size);
VARATT_SIZEP(new_text) = new_text_size;
memcpy(VARDATA(new_text), VARDATA(arg1), VARSIZE(arg1)-VARHDRSZ);
memcpy(VARDATA(new_text) + (VARSIZE(arg1)-VARHDRSZ), VARDATA(arg2), VARSIZE(arg2)-VARHDRSZ);
PG_RETURN_TEXT_P(new_text);
}
ma requette :
select concat_text('erer','erere');
[ Vous devez
vous connecter pour poster des commentaires ]
Pour info, je viens de trouve
krizz/ = 25 Avril, 2006 - 12:03
Pour info, je viens de trouver mon erreur ;)
Cet un problême de déclaration de fonction.
Dans le cas la fonction concat_text il faut bien vérifier la présence dans le fichier .def généré les déclaration de concat_text @1 ET de pg_finfo_concat_text
Voici mes sources pour info :
/*******/
fichier.h
/*******/
#ifndef __FICHIER_H__
#define __FICHIER_H__
#define WIN32_CLIENT_ONLY
#include "postgres.h"
#include "fmgr.h"
#include "executor/executor.h"
#ifdef BUILD_DLL
#define EXPORT __declspec(dllexport)
#else
#define EXPORT __declspec(dllimport)
#endif
EXPORT Datum concat_text(PG_FUNCTION_ARGS);
#endif
/*******/
fichier.c
/*******/
#define BUILD_DLL
#include "fichier.h"
#include stdio.h
#include stdlib.h
#include time.h
EXPORT PG_FUNCTION_INFO_V1(concat_text);
EXPORT Datum concat_text(PG_FUNCTION_ARGS)
{
if ( (PG_NARGS()>1)&&(!PG_ARGISNULL(0))&&(!PG_ARGISNULL(1)) )
{
text *arg1 = PG_GETARG_TEXT_P(0);
text *arg2 = PG_GETARG_TEXT_P(1);
int32 new_text_size = VARSIZE(arg1) + VARSIZE(arg2) - VARHDRSZ;
text *new_text = (text *) palloc(new_text_size);
VARATT_SIZEP(new_text) = new_text_size;
memcpy(VARDATA(new_text), VARDATA(arg1), VARSIZE(arg1)-VARHDRSZ);
memcpy(VARDATA(new_text) + (VARSIZE(arg1)-VARHDRSZ), VARDATA(arg2), VARSIZE(arg2)-VARHDRSZ);
PG_RETURN_TEXT_P(new_text);
}
else
{
elog(ERROR,"concat_text PG_NARGS = %i", PG_NARGS());
PG_RETURN_NULL();
}
}
/**********/
fichier .def
/**********/
EXPORTS
concat_text @1
pg_finfo_concat_text @2
maintenant cela fonctionne...
krizz
[ Vous devez
vous connecter pour poster des commentaires ]