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

#26 Re : pgAdmin4 » liste des agrégats définis par l'utilisateur » 12/01/2018 00:52:09

Salut
Une mise à jour vient de sortir (la version 2.1).
Le problème n'est toujours pas résolu! Après recherche j'ai trouvé qu'il à été signalé comme bug bien avant la sortie de 2.0.
Si une bonne volonté peut alors remonter le problème.
@+

#27 Re : Général » VACUUM or NOT VACUUM » 30/12/2017 13:14:00

Salut
Peut être à cause du fait que VACUUM simple ne restitue pas l'espace mort à l'OS.
Essayer la même chose avec VACUUM FULL.
@+

#28 pgAdmin4 » liste des agrégats définis par l'utilisateur » 25/12/2017 01:04:31

alassanediakite
Réponses : 1

Salut
Je viens de créer un agrégat dans PostgreSQL 10 à travers pgAdmin4 V2.0, mais je ne vois le nœud permettant de voir les agrégats utilisateurs.
Par ailleurs, j'ai chercher dans les préférences de pgAdmin4, le nœud des agrégats n'existe pas.
Avez-vous la solution pour voir ce nœud?
@+

#30 Autres langages » différence entre HeapTupleHeader et HeapTuple » 10/12/2017 23:22:22

alassanediakite
Réponses : 2

Bonjour
Je voudrais savoir la différence entre HeapTupleHeader et HeapTuple dans le traitement des lignes en fonction C.
J'avais compris HeapTuple comme étant une ligne mais je vois des traitement utilisant HeapTupleHeader cela m'a plongé dans une confusion.
Merci d'avance.

#31 Re : Général » [RÉSOLU] utiliser la Base postgres pour stocker des données » 25/09/2017 23:51:04

Salut
J'étais dans la même erreur jusqu'à tout de suite.
Une question, peut-on la supprimer sans problème (la base postgres)?
Merci d'avance.

#34 Re : Général » Configuration pgsqlODBC x64 sur windows server 2012 r2 64bits » 21/08/2017 14:50:27

Salut
SVP, précisez la source (l'éditeur) du setup du pilote ODBC.
@+

#36 Re : Général » le choix de UTF8 » 11/04/2017 16:53:10

Salut
Merci ruizsebastien.
J'ai trouvé plus de précisions ici

ENCODING=encodage (stockage en nbre de bit)
LC_COLLATE=ordre de tri des chaînes
LC_CTYPE=ensemble de caractère (ou page de code de caractères)

@+

#37 Général » [RESOLU] l'option FREEZE de VACUUM » 11/04/2017 16:44:06

alassanediakite
Réponses : 2

Salut
Je voudrais comprendre l'action de l'option FREEZE de VACUUM.
Je viens de lire...

FREEZE: l'identifiant de la ligne est passé à une valeur spéciale “toujours visible”

dans ce document (page 12) et je ne comprend pas le sens.
Merci d'avance.

#38 Re : Général » le choix de UTF8 » 16/02/2017 15:49:37

Salut
Merci ruizsebastien.
En fait j'ai vu la réponse depuis sa date mais je creuse toujours.
Pouvez-vous m'aide à différencier les paramètres LC_COLLATE et LC_CTYPE
Je m'étais fait la conclusion suivante....

De façon générale
->encodage
    =encoding
    =characteres set
    =ensemble de caractères
->collation
    =ordre de tri de caracères (tout caractères     imprimable) + équivalence Majuscule et mminuscule + équivalence accent et sans accent
Dans PostgreSQL
->ENCODING=ensemble de caractères
->LC_COLLATE=ordre de tri des chaînes
->LC_CTYPE=collation=classification des caractère

mais je pense qu'il y a confusion sur LC_COLLATE et LC_CTYPE
Merci d'avance
@+

#39 Général » le choix de UTF8 » 13/02/2017 19:53:40

alassanediakite
Réponses : 4

Salut
Je voudrais savoir les pour et contres de uft8 sur les bases de données relationnelles et particulièrement de PostgreSQL.
Par ailleurs si quelqu'un peut me guider sur un explication assez claire sur les encodages, locales et collation.
Précisément le mot COLLATION! La phrase "Conceptuellement, toute expression d'un type de donnée qui est collatable a une collation" de la documentation de PostgreSQL est à mon avis très floue.
Merci d'avance
@+

#40 Re : Autres langages » [RESOLU] créer une fonction c avec eclipse sur ubuntu » 12/01/2016 03:07:19

Salut
J'ai trouvé la solution avec NetBeans 8.1 en suivant la solution sur VS et WINDOWS.
@+

#41 Re : Autres langages » [RESOLU] créer une fonction c avec eclipse sur ubuntu » 11/01/2016 21:13:52

Salut
J'ai déjà vu ce tuto. Mais trop compliquer pour moi, je préfère cliquer sur "build project" plutôt que d'utiliser "make..." en ligne de commande. Chaque chose a son temps.
Merci pour l'aide. Je continu à chercher.
@+

#42 Autres langages » [RESOLU] créer une fonction c avec eclipse sur ubuntu » 10/01/2016 20:57:13

alassanediakite
Réponses : 3

Salut
J'ai réussit l'installation de PostgreSQL pour la première fois sur Ubuntu.
Je souhaite continuer avec la création de fonction C à partir de eclipse.
J'ai réussit à mettre en place l'environnement de eclipse et tester un "Hello word!".
Pour la création d'une fonction C pour PostgreSQL, les "include" posent des problème que j'arrive pas à résoudre.
J'ai commencer par copier les dossiers "include" et "lib" de postgresql dans le dossier de mon projet, puis je les ai copier dans /usr/include
Mais à chaque fois les inclusions posent problème. Par exemple dans le header elog.h, l'inclusion #include "utils/errcodes.h" n'est par résolue.
Cela fait au moins trois jours que je cherche mais sans succès.
Avez-vous une solution façon clique->clique->clique pour débutant?
Merci d'avance.

#43 Re : Général » violation de l'intégrité référentielle » 23/09/2015 16:55:50

Salut
Le cas que vous citez dans http://blog.guillaume.lelarge.info/inde … g%C3%A8res fait une désactivation implicite et produira un comportement normale (c'est à dire respect de la cohérence).
C'est le "RETURN NULL" qui n'est pas conforme aux exigence ACID d'un SGBD puis qu'il permet de SAUTER UNE LIGNE de la transaction.
Je cite la documentation...

Il peut retourner un pointeur NULL pour sauter l'opération pour la ligne courante. Ceci donne comme instruction à l'exécuteur de ne pas exécuter l'opération niveau ligne qui a lancé le déclencheur (l'insertion, la modification ou la suppression d'une ligne particulière de la table).

gleu a écrit :

J'ai bien compris le problème. Je ne dis pas que le comportement est le meilleur qu'il soit.

En somme, on peut dire que "PostgreSQL peut exécuter des transaction AID c'est à dire non Cohérentes".
@+

#44 Re : Général » violation de l'intégrité référentielle » 23/09/2015 02:50:14

Salut

gleu a écrit :

OK. Posons le problème autrement. Vous avez la contrainte d'intégrité qui supprime et le trigger qui empêche la suppression. Que PostgreSQL doit-il choisir d'après vous ? accepter la violation de la contrainte d'intégrité ou ignorer l'exécution du trigger (vu que son action est en contradiction avec la contrainte d'intégrité).

Annuler toute la transaction, c'est à dire depuis la suppression sur tm. Le trigger en donnant "NULL" est censé avoir signaler qu'il ANNULE la suppression sur tf, alors ce signal doit arrêter toute la transaction. Le respect des contraintes d'intrégrités doit être ABSOLU dans un SGBD  et toute action contraire doit être rejeté.
@+

#45 Re : Général » violation de l'intégrité référentielle » 22/09/2015 15:34:37

Salut gleu
Vous devez plutôt considérer le fait de "violation d'intégrité" et non comment j'y suis arrivé (bien que cela aide à comprendre l'origine du PROBLEME).
Le trigger réel est plus étoffé que ça! C'est après réflexion que j'ai soupçonné le "RETURN NULL".
Quel que soit l'action de mon trigger, le SGBD ne doit accepter que les données soient incohérentes.
@+

#46 Général » violation de l'intégrité référentielle » 22/09/2015 03:02:15

alassanediakite
Réponses : 10

Salut
La situation...
Les tables tm et tf (tf liée à tm par une intégrité référentielle)

create table tm(idm serial not null primary key, vm varchar);
create table tf(idf serial not null primary key, idm int not null references tm(idm) on delete cascade, vf varchar);

Un fonction trigger qui annule la suppression dans tf

--le trigger
create function tgtf() returns trigger
as
$$
begin
return null;
end
$$ language plpgsql

--liaison à tf
create trigger tgf before delete on tf
 FOR EACH ROW
  EXECUTE PROCEDURE tgtf();

insertion de données dans tm et tf

insert into tm(vm) values('a'),('b'),('c');
insert into tf(idm, vf) values(1, 'a1'),(1, 'a2'), (2, 'b1'), (2, 'b2'),(3, 'c1'),(3, 'c2');

suppression d'une ligne de tm

delete from tm where idm=1;

la jointure gauche

select tf.idm, tf.vf, tm.idm from tf left join tm on tf.idm=tm.idm;

idm      vf    idm
1        a1     null
1        a2     null
2        b1     2
2        b2     2
3        c1     3
3        c2     3

Qu'en dites-vous?
J'avais une fois remarqué qu'une des mes bd présentait ce problème (violation d'intégrité référentielle) sans que je ne sache comment c'est arrivé. Maintenant que j'ai reproduit la situation, je veux comprendre le problème.
@+

#48 Re : Sécurité » changement d'utilisateur courant dans la suppression en cascade » 12/05/2015 13:02:01

Salut et grand merci de l'info.
Mais est ce vraiment bien que PostgreSQL permet à un utilisateur (ayant droit de suppression sur ta et non sur tb) arrive quand même à supprimer des lignes dans tb?
Imaginons un chef GRH ayant le droit de suppression sur la table des ouvriers et non sur celle des pointages.
Il veut se débarrasser d'un mauvais ouvrier qui (supposons le, a déjà des pointages), imaginez la tête du comptable à la suite.
@+

#49 Sécurité » changement d'utilisateur courant dans la suppression en cascade » 10/05/2015 20:01:30

alassanediakite
Réponses : 4

Salut
Je constate un problème avec CURRENT_USER lors d'une suppression en cascade.
La situation...( version 9.4.1)
1-->_______
Je me connecte avec le compte postgres
Création de deux tables liées avec suppression en cascade...

CREATE TABLE ta
(
  ida integer NOT NULL,
  v character varying,
  CONSTRAINT ta_pkey PRIMARY KEY (ida)
)

CREATE TABLE tb
(
  idb integer NOT NULL,
  ida integer,
  v character varying,
  CONSTRAINT tb_pkey PRIMARY KEY (idb),
  CONSTRAINT tb_ida_fkey FOREIGN KEY (ida)
      REFERENCES ta (ida) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE CASCADE
)

La table qui enregistre l'historique de CURRENT_USER

CREATE TABLE th
(
  v character varying,
  idh serial NOT NULL,
  CONSTRAINT th_pkey PRIMARY KEY (idh)
)

Les triggers

CREATE OR REPLACE FUNCTION huser() RETURNS trigger AS
$$
begin
	insert into th(v) values(current_user);
	return old;
end
$$
  LANGUAGE plpgsql
  
 CREATE TRIGGER huser
 BEFORE DELETE
 ON ta
 FOR EACH ROW
 EXECUTE PROCEDURE huser();
  
 CREATE TRIGGER huser
 BEFORE DELETE
 ON tb
 FOR EACH ROW
 EXECUTE PROCEDURE huser();
 

Les données

INSERT INTO ta(ida, v) VALUES (1, 'A'), (2, 'B');
INSERT INTO tb(idb, ida, v) VALUES (1, 1, 'Aa'), (2, 1, 'Ab'), (3,2, 'Ba'), (4, 2, 'Bb');

2-->___________
Je me connecte avec un autre compte

La suppression dans ta (sera fait avec le nouveau compte) qui provoquera une suppression en cascade (avec le compte postgres!)

delete from ta where ida=1;

Le contenu de l'historique de CURRENT_USER

select * from th;

"vaillants"
"postgres"
"postgres"

Alors, la question: est ce un comportement normal?
Je voulais mettre ne place un mécanisme de contrôle de modification et de suppression (vous ne supprimer ou modifier que si vous êtes propriétaire ou administrateur). Mais ce comportement de PostgreSQL est un frein.
@+

#50 Re : Autres langages » créer une vue en langage C » 15/03/2015 23:39:54

Salut
J'ai finalement trouvé une solution par SPI_returntuple dans la doc. Grand merci à vous.
Le code en C

#include "postgres.h"
#include "fmgr.h"
#include "executor/spi.h"
#include "funcapi.h" 
#include <string.h>
#include <stdio.h>
#include <stdlib.h> 
PG_MODULE_MAGIC; 
PG_FUNCTION_INFO_V1(vpersonne);
PGDLLEXPORT 
        Datum
        vpersonne(PG_FUNCTION_ARGS)
        {
	int spi_ret;
            char sql[100];            
            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) {
				result=PointerGetDatum(SPI_returntuple(SPI_tuptable->vals[funcctx->call_cntr],SPI_tuptable->tupdesc));
				SRF_RETURN_NEXT(funcctx, result);
            } else {
                SPI_finish();
                SRF_RETURN_DONE(funcctx);
            }
        }

La fonction dans PostgreSQL

CREATE OR REPLACE FUNCTION vpersonne(integer)
  RETURNS SETOF record AS
'fnpgsqlsrf.dll', 'vpersonne'
  LANGUAGE c

Le test de la fonction

SELECT * from  vpersonne(null) as (id int, prenom varchar, nom varchar);

@+

Pied de page des forums

Propulsé par FluxBB