open(P,"vcbuild /? |") || die "vcbuild command not found";
my $line = <P>;
close(P);
if ($line !~ /^Microsoft\s*\(R\) Visual C\+\+ [^-]+ - \D+(\d+)\.00\.\d+/)
{
die "Unable to determine vcbuild version from first line of output!";
}
J'ai vs2010 et vs2008 installé; SDK 6.0A et 7.0A. Est-ce là le problème?
Merci d'avance.
Mais bon, modifier config_default.pl doit aussi fonctionner.
Pour lancer le script build, vous devez être dans le répertoire qui contient ce script. Donc utilisez cd pour vous y déplacer, puis lancer la commande build exactement comme indiqué dans la documentation.
]]>Perl=>undef,
en
perl=>'C:\Program Files\Perl\bin',
.
Voici ce que me donne les tentatives avec la ligne de commande de VS2008
Merci d'avance.
En fait, c'est assez simple. Vous installez ActivePerl (c'est un installeur Windows standard), vous récupérez les sources de PostgreSQL et vous compilez PostgreSQL comme expliqué sur ce lien. Une fois que vous avez fait ça, j'explique le reste. Rien ne sert à expliquer le reste tant que cela n'est pas fait.
]]>Erreur 1 error LNK2019: symbole externe non résolu "unsigned int __cdecl Float8GetDatum(double)" (?Float8GetDatum@@YAIN@Z)
référencé dans la fonction "unsigned int __cdecl add_one_float8(struct FunctionCallInfoData *)" (?add_one_float8@@YAIPAUFunctionCallInfoData@@@Z)
C:\Users\DIAKITE\Documents\Visual Studio 2010\Projects\myfunc\myfunc\mesfnC.obj myfunc
J'ai aussi tenté avec un fonction perle. "Create extension" passe mais à chaque fois que j'essaye de créer une fonction en perle la connexion se coupe et le serveur (le service postgresql) s'arrête. Je pensais à un problème de droit, j'ai alors pris le user postgres de win comme administrateur mais rien ne change.
Mon environnement: win7 pro, pg9.1.3, activeperle 5.14.2.
Merci d'avance.
Est-ce obligatoire (en plus du SDK de microsoft) d’avoir les autres (perle, bison…).
Comme dit dans le document, Perl est obligatoire (le script Build est en Perl). Bison n'est pas obligatoire si vous récupérez les sources packagées. Il l'est si vous récupérez PostgreSQL à partir du git.
Je viens de télécharger la source de PostgreSQL. Cela ne pose-t-il pas de problème avec l’installation déjà existante ?
Non. Il ne s'agit pas de l'installer, il s'agit seulement de le compiler.
]]>#include "postgres.h"
#include <string.h>
#include "fmgr.h"
#include "utils/geo_decls.h"
#ifdef PG_MODULE_MAGIC
PG_MODULE_MAGIC;
#endif
/* par valeur */
PG_FUNCTION_INFO_V1(add_one);
Datum
add_one(PG_FUNCTION_ARGS)
{
int32 arg = PG_GETARG_INT32(0);
PG_RETURN_INT32(arg + 1);
}
/* par référence, longueur fixe */
PG_FUNCTION_INFO_V1(add_one_float8);
Datum
add_one_float8(PG_FUNCTION_ARGS)
{
/* La macro pour FLOAT8 cache sa nature de passage par référence. */
float8 arg = PG_GETARG_FLOAT8(0);
PG_RETURN_FLOAT8(arg + 1.0);
}
PG_FUNCTION_INFO_V1(makepoint);
Datum
makepoint(PG_FUNCTION_ARGS)
{
/* Ici, la nature de passage par référence de Point n'est pas cachée. */
Point *pointx = PG_GETARG_POINT_P(0);
Point *pointy = PG_GETARG_POINT_P(1);
Point *new_point = (Point *) palloc(sizeof(Point));
new_point->x = pointx->x;
new_point->y = pointy->y;
PG_RETURN_POINT_P(new_point);
}
/* par référence, longueur variable */
PG_FUNCTION_INFO_V1(copytext);
Datum
copytext(PG_FUNCTION_ARGS)
{
text *t = PG_GETARG_TEXT_P(0);
/*
* VARSIZE est la longueur totale de la structure en octets.
*/
text *new_t = (text *) palloc(VARSIZE(t));
SET_VARSIZE(new_t, VARSIZE(t));
/*
* VARDATA est un pointeur vers la région de données de la structure.
*/
memcpy((void *) VARDATA(new_t), /* destination */
(void *) VARDATA(t), /* source */
VARSIZE(t) - VARHDRSZ); /* nombre d'octets */
PG_RETURN_TEXT_P(new_t);
}
PG_FUNCTION_INFO_V1(concat_text);
Datum
concat_text(PG_FUNCTION_ARGS)
{
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);
SET_VARSIZE(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);
}
Mais à chaque fois qu'une "#include..." apparait dans un fichier ".h" de postgresql VS2010 me dit qu'il ne trouve pas le fichier.
Je suis débutant en C et mon objectif est de récupérer (dans postgresql) les données d'une bd ACCESS par ODBC avec la DLL en C. Pour le moment je cherche juste les bases de compilation d'une fonction en C sur postgresql.
Un grand merci d'avance.