Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#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?
@+
#29 Re : Autres langages » différence entre HeapTupleHeader et HeapTuple » 11/12/2017 19:42:32
Merci
Je vais donc me contenter de HeapTuple pour le moment.
#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.
#32 Re : Installation » Installation PostgreSQL sous windows » 21/08/2017 15:11:10
trop tard! à supprimer!
#33 Re : Général » Configuration pgsqlODBC x64 sur windows server 2012 r2 64bits » 21/08/2017 15:02:02
Salut
Pourquoi ne pas essayer la version plus récente du pilote?
@+
#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.
@+
#35 Re : Général » [RESOLU] l'option FREEZE de VACUUM » 12/04/2017 17:29:21
Salut
Merci gleu, c'est très claire
@+
#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).
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
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.
@+
#47 Re : Sécurité » changement d'utilisateur courant dans la suppression en cascade » 13/05/2015 19:53:46
Salut
Merci de l'info, avec session_user cela marche.
@+
#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 cLe test de la fonction
SELECT * from vpersonne(null) as (id int, prenom varchar, nom varchar);@+