Vous n'êtes pas identifié(e).

#51 Re : Autres langages » créer une vue en langage C » 08/03/2015 22:56:59

Salut
Grand merci à vous gleu, mais l'exemple donné ne m'a pas été très utile.
J'ai trouvé un code (sur une page en russe! avec les mots clé "postgresql srf function language C") que j'ai travaillé un peut...
La fonction en C

#include "postgres.h"
#include "fmgr.h"
#include "executor/spi.h"
#include "funcapi.h" // to return set of rows and cope with tuples
#include <string.h>
#include <stdio.h>
#include <stdlib.h> 
PG_MODULE_MAGIC; 
PG_FUNCTION_INFO_V1(get_level1_c);
PGDLLEXPORT 
        Datum
        get_level1_c(PG_FUNCTION_ARGS)
        {
            int spi_ret;
            char sql[100]; 
            char *id;
            FuncCallContext *funcctx;
            MemoryContext oldcontext;
            Datum result;

            if (SRF_IS_FIRSTCALL()) {
                funcctx = SRF_FIRSTCALL_INIT();
                oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);


                SPI_connect(); 
                snprintf(sql, sizeof(sql), "SELECT id, prenom, lenom  FROM personne;");

                    spi_ret = SPI_execute(sql, true, 0);

                    funcctx->max_calls = SPI_processed;

                MemoryContextSwitchTo(oldcontext);
            }

            funcctx = SRF_PERCALL_SETUP();

            if (funcctx->call_cntr < funcctx->max_calls) {
				HeapTuple tuple = SPI_tuptable->vals[funcctx->call_cntr];// ligne que j'ai ajouté	
                    //id = SPI_getvalue(SPI_tuptable->vals[funcctx->call_cntr], SPI_tuptable->tupdesc, 1);

                //result = Int32GetDatum(atoi(id));
				
				result=HeapTupleGetDatum(tuple);// ligne que j'ai ajouté	
                SRF_RETURN_NEXT(funcctx, result);
            } else {
                SPI_finish();
                SRF_RETURN_DONE(funcctx);
            }
        }

La fonction correspondante dans postgresql...

CREATE OR REPLACE  FUNCTION get_level1_c(IN integer)
  RETURNS table(id integer, prenom character varying(30),  lenom character varying(20)) AS
'fnpgsqlsrf.dll', 'get_level1_c'
  LANGUAGE C

Sans les lignes ajoutées j'obtiens une seule colonne. J'ai essayé d'avoir plusieurs colonnes mais j'ai l'erreur...

ERREUR: cache lookup failed for type 0
État SQL :XX000

J’ai espoir que quelqu'un m'aidera à compléter cette fonction.
Merci d'avance.

#52 Re : Autres langages » créer une vue en langage C » 05/03/2015 22:32:42

Salut et encore merci
J'ai juste besoin D'UN POINT de départ. Ce n'est pas la volonté de chercher qui manque (plus de 90% de ma connaissance est le résultat d'une autoformation!!!).
Je trouve que c'est vraiment pas trop demandé de me coller UN PETIT EXEMPLE comme point de départ.
Merci d'avance.

#53 Re : Autres langages » créer une vue en langage C » 05/03/2015 17:40:46

Salut
Merci du temps perdu à m'aider.
Je reformule ma question...
Avez-vous un exemple de fonction (procédure stockée) en C qui exécute un select sur des tables et retourne le résultat sous forme de table? (le code du select étant intégré dans la fonction en C).
Merci d'avance.

#54 Re : Autres langages » créer une vue en langage C » 04/03/2015 21:33:40

Salut et grand merci de la réponse (qui m'apprend plus PostgreSQL).
Pour la création de vues, il s'agit de créer une fonction en C qui retourne une table puis je crée une vue par "CREATE VIEW NOMVUE AS SELECT * FROM MAFONCTION(...)".
Par ailleurs, il s'agit des codes de quelques uns de mes objets que je trouve être le cœur de mon œuvre.
Par votre réponse, doit-on comprendre qu'il est impossible de protéger un code source dans une base PostgreSQL?
Merci d'avance

#55 Autres langages » créer une vue en langage C » 02/03/2015 15:33:38

alassanediakite
Réponses : 10

Salut
J'ai un projet dans lequel je voudrais masquer certaines de mais vues dans des procédures en langage C.
En effet, ma base est sur PostgreSQL et l'interface est en ACCESS. Quand j'installe la base sur le serveur du client, l'administrateur du serveur a accès aux codes source de ma base sur PostgreSQL.
L'objectif est alors de créer quelques unes des mes vues dans des procédures en langage C.
Jusqu'à présent j'ai réussi à faire uniquement des fonctions qui retournent des types simples en langage C. J'ai tenter de comprendre le mécanisme mais il est trop compliqué (trop de pointeurs et de structures compliquées); et les exemples de la doc utilisent des lignes créées et non des lignes de tables.
Si vous avez un exemple?
Merci d'avance.
@+

#56 Re : Général » Problème de ORDER BY sur un champ de type case when » 21/07/2014 15:42:51

Salut
Cela est très normale.
le regroupement (group by) et le trie (order by) s'appliquent sur l'ensemble des données (concernées). Par exemple, on dira "regrouper par localité, par sexe, par moyenne..." ou "trier (ordonner) par nom, par prénom...".
Il est alors illogique de dire "grouper par jean, par zidane..." ou "trier par paris, par mercedes..."
Pour faire simple et précis: pas de condition dans le group by ou le order by!
@+

#57 Re : Général » [9.4 beta]resultat étrange jointure ou wehre » 21/07/2014 15:19:18

Salut
Merci pour la contribution.
En fait le problème vient de l'avant dernière jointure.

INNER JOIN tspecialite ON 
 tniveau.idspecialite = tniveau.idspecialite 

cela crée une jointure croisée.
Il faut avouer que c'était pas évident de le dénicher. Le problème a été détecter par une autre personne ailleurs.
@+

#58 Général » [9.4 beta]resultat étrange jointure ou wehre » 10/07/2014 14:11:28

alassanediakite
Réponses : 2

Bonjour
J'ai une situation assez étrange pour moi.
La base de données concerne une école (filière, spécialité, cycle, niveau, classe, étudiant, inscription->association entre étudiant et classe). Je voulais avoir la liste d'une classe et je suis un peut surpris du résultat.
Scénario...
I/ avec WHERE
SQL

SELECT 
  tetudiant.leprenom, 
  tetudiant.lenom
FROM 
  public.tinscription, 
  public.tetudiant, 
  public.tclasse, 
  public.tniveau, 
  public.tcycle, 
  public.tannee, 
  public.tspecialite, 
  public.tfiliere
WHERE 
  tetudiant.idetudiant = tinscription.idetudiant AND
  tclasse.idclasse = tinscription.idclasse AND
  tniveau.idniveau = tclasse.idniveau AND
  tcycle.idcycle = tniveau.idcycle AND
  tannee.idannee = tclasse.idannee AND
  tspecialite.idspecialite = tniveau.idspecialite AND
  tfiliere.idfiliere = tspecialite.idfiliere;

sortie...
  "Aoua";"Coulibaly"
"Kadiatou";"Coulibaly"
"Bintou";"Dembélé"
"Fatoumata";"Bagayoko"
"Fanta";"Bouaré"
"Amadou";"Bah"

II/ avec jointure 1ère forme....
SQL....

SELECT 
  tetudiant.leprenom, 
  tetudiant.lenom
from public.tannee inner join 
  public.tclasse on  tannee.idannee = tclasse.idannee
  inner join public.tniveau on  tniveau.idniveau = tclasse.idniveau
  inner join public.tinscription on  tclasse.idclasse = tinscription.idclasse
  inner join public.tcycle on  tcycle.idcycle = tniveau.idcycle
  inner join public.tspecialite on  tspecialite.idspecialite = tniveau.idspecialite
  inner join public.tfiliere on  tfiliere.idfiliere = tspecialite.idfiliere
  inner join public.tetudiant on tetudiant.idetudiant = tinscription.idetudiant

sortie...
"Aoua";"Coulibaly"
"Kadiatou";"Coulibaly"
"Bintou";"Dembélé"
"Fatoumata";"Bagayoko"
"Fanta";"Bouaré"
"Amadou";"Bah"

II/ avec jointure 2ème forme...
SQL

SELECT 
  tetudiant.leprenom, 
  tetudiant.lenom
FROM tinscription
 INNER JOIN tetudiant ON 
 tetudiant.idetudiant = tinscription.idetudiant 
 INNER JOIN tclasse ON 
 tclasse.idclasse = tinscription.idclasse 
 INNER JOIN tniveau ON 
 tniveau.idniveau = tclasse.idniveau 
 INNER JOIN tcycle ON 
 tcycle.idcycle = tniveau.idcycle 
 INNER JOIN tannee ON 
 tannee.idannee = tclasse.idannee 
 INNER JOIN tspecialite ON 
 tniveau.idspecialite = tniveau.idspecialite 
 INNER JOIN tfiliere ON 
 tfiliere.idfiliere = tspecialite.idfiliere

sortie...
"Aoua";"Coulibaly"
"Aoua";"Coulibaly"
"Aoua";"Coulibaly"
"Aoua";"Coulibaly"
"Kadiatou";"Coulibaly"
"Kadiatou";"Coulibaly"
"Kadiatou";"Coulibaly"
"Kadiatou";"Coulibaly"
"Bintou";"Dembélé"
"Bintou";"Dembélé"
"Bintou";"Dembélé"
"Bintou";"Dembélé"
"Fatoumata";"Bagayoko"
"Fatoumata";"Bagayoko"
"Fatoumata";"Bagayoko"
"Fatoumata";"Bagayoko"
"Fanta";"Bouaré"
"Fanta";"Bouaré"
"Fanta";"Bouaré"
"Fanta";"Bouaré"
"Amadou";"Bah"
"Amadou";"Bah"
"Amadou";"Bah"
"Amadou";"Bah"
_____________________________________

Je constate que la deuxième forme de jointure multiplie par 4 le résultat des deux autres.
Avez-vous des explications. Aux besoin, je peux donner le backup (<300KO) en sql de la base.
Merci d'avance.

#59 Réplication » siège et annexe autonome avec synchronisation régulière » 26/05/2014 17:24:14

alassanediakite
Réponses : 0

Bonjour
Ma situation :
Un établissement scolaire avec un siège principal et des annexes. Chaque annexe ne gère qu’un cycle de l’enseignement (maternel, primaire, secondaire ou supérieur)
Je veux :
->Un environnement autonome par localité
->A l’instant t0, le siège génère un script des données par localité (filtre alors par cycle sur une période maxi de trois années scolaires)
->t1, chaque annexe initialise ses données (propre au cycle) à partir du script généré par le siège. Chaque annexe ne peut modifier que les nouvelles lignes qu’elle aura ajoutées.
->t2, à la fin d’une période déterminée, chaque annexe génère un script des nouvelles lignes qu’elle à créé
->t3, le siège ajoute les lignes des annexes puis le cycle reprend.
Je voudrais avoir vos avis sur la mise en œuvre et les éventuels inconvénients.
Mers d’avance.

#61 Re : Général » Utilisation d'un outil graphique comme MySQL Workbench pour PostgreSQL » 09/05/2014 12:09:55

Salut
gleu, on l'attendait depuis la version 1.16 je pense. Pourquoi ne pas le proposer en BETA avec envoie automatique de rapport. Je pense que cela permettra un bon test.
En écrivant cela je pense aux non informaticiens qui ne cessent de dire "pourquoi ne peut-on pas faire ceci ou cela?" wink
@+

#62 Re : Général » L'ordre des indexes a-t-il une importance ? (cas multi index) » 29/04/2014 13:06:46

Salut

guk92 a écrit :

Donc considérons que j'ai une table avec trois colonnes : a, b, et c.
Si je crée l'index mon_index(a, c) alors l'index agira dans les cas suivants :

SELECT * FROM ma_table WHERE a = 1;
SELECT * FROM ma_table WHERE a = 1 AND b = 1 AND c = 1;
SELECT * FROM ma_table WHERE a = 1 OR b = 1 OR c = 1;

...

Je ne pense que l'index agira dans le cas

SELECT * FROM ma_table WHERE a = 1 OR b = 1 OR c = 1;

Le OR n'est pas sargable.
@+

#63 Re : Sécurité » desactiver le pg_hba.conf » 20/03/2014 14:53:10

(Win 7) clic-droit->propriété->général->attribut->avancés->chiffrer

#64 Re : Sécurité » desactiver le pg_hba.conf » 18/03/2014 12:03:34

Salut
gleu, avez-vous une solution à me proposer.
Sur windows, je pense
->créer un seul compte admin avec mot de passe
->lancer le service postgresql avec ce compte
->chiffrer le dossier data de postgresql
J'ai déjà tester la solution.
Cette solution est-elle bonne? quelles peuvent être les inconvénients?
Merci d'avance.

#65 Re : Sécurité » desactiver le pg_hba.conf » 17/03/2014 11:06:59

Bonjour
Merci pour la réponse.
Pas très rassurant, mais je continue à chercher les astuces.

#66 Sécurité » desactiver le pg_hba.conf » 13/03/2014 16:07:02

alassanediakite
Réponses : 7

Bonjour
Est-il possible de désactiver l'authentification passant par pg_hba.conf?
Je compte installer ma base (de mon appli de gestion d'école) sur le serveur du client. Puisque je ne peux pas monopoliser le serveur je voudrais désactiver le fichier pg_hba.conf pour éviter tout accès qu'à partir de mon appli. Ainsi je protège mes codes source Pl/pgsql et le schéma source de ma base.
Actuellement le serveur doit être sur windows. A défaut, une solution en Linux peut m’intéresser.
Merci d'avance.

#68 Re : Général » fonctionnement des inxdexs » 08/01/2014 10:57:18

Bonjour
Quelles sont les avantages de cette méthode par rapport à REINDEX
Merci d'avance.

#69 Re : Général » heberger supportant postgresql » 03/10/2013 11:54:02

Salut et merci
Je ne sais pas ce que veut dire hébergement mutualisé.
Je cherche juste à créer un site (ex: www.monsite.com) pour un logiciel que j'ai développé pour les écoles au Mali (Afrique de l'ouest).
Merci d'avance

#70 Général » heberger supportant postgresql » 03/10/2013 11:43:01

alassanediakite
Réponses : 3

Bonjour
Je voudrais avoir une liste d’héberger supportant postgresql. La liste proposée par le site (postgresql.fr) me semble obsolète.
Merci d'avance.

#72 Général » a propos de version 1.8.2 » 27/04/2013 14:24:26

alassanediakite
Réponses : 2

Salut
Je voudrais juste savoir s'il existe une version 1.8.2 de PostgreSQL sortie en fév 2008?
Merci d'avance

#73 Re : Optimisation » Requête à optimiser » 12/02/2013 20:46:12

Salut à vous.
gleu, si la sous-requête "select numero,dat from TEMP group by numero,dat having (count(*)>1)" n'est pas corrélée pourquoi est-elle exécutée X fois?
@+

#74 Re : PL/Perl » envoie de mail » 27/12/2012 18:45:05

Salut
J'ai vraiment chercher mais rien n'a faire, pas de solution avec plperl. J'ai trouvé une solution avec vbscript + batch mais là mes infos (login et mot de passe) sont en claire sur vbs.
Ce n'est que partie remise.
@+

#75 Re : PL/Perl » envoie de mail » 20/12/2012 16:04:11

Salut et merci de la réponse
Je ne reçois pas d'erreur. Mais le zéro (0) de retour. En fait, s'il était possible de savoir l'erreur ce serait mieux.
PS/ je viens de voir un de vos immenses travaux ici. Grand merci à vous.

Pied de page des forums

Propulsé par FluxBB