PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

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

#51 Re : Général » Traduction de auto_increment » 21/09/2012 01:36:34

Une séquence est associée au champ, et pg a des fonctions pour manipuler les séquences.
Exemple :
Création de la table :

CREATE TABLE sspact (
    id_sspact integer NOT NULL,
 ...

Création de la séquence :

CREATE SEQUENCE sspact_id_sspact_seq
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;

Modifier le prochain numéro  :

SELECT setval('sspact_id_sspact_seq', 399, true); -- true signifie que le prochain numéro donné sera 400 , false ==> 399

Association champ/séquence :

ALTER TABLE ONLY sspact ALTER COLUMN id_sspact SET DEFAULT nextval('sspact_id_sspact_seq'::regclass);

Toutes les autres fonctions sont là :  Doc fonctions de séquence


Alex

#53 phpPgAdmin » phpPgAdmin 5.0.4 et PostgreSQL 9.2 ? » 16/09/2012 14:33:46

MitsuTomoe
Réponses : 2

Bonjour,
je suis en train de préparer la migration de pg 9.1 en 9.2, et me demandais si phpPgAdmin était compatible ?
Faut-il attendre la 5.1, et si oui pour quand est-elle prévue ?

Merci pour vos infos

#54 Re : PL/pgSQL » Trigger pour vérifier si un ajout concorde avec une autre table » 02/09/2012 23:54:00

Au lieu d'un trigger, pourquoi ne pas déclarer une foreign key ?
ALTER TABLE ONLY compagnies
ADD CONSTRAINT ville_fkey FOREIGN KEY (mus_nm_mun) REFERENCES admin(mus_nm_mun) ON DELETE RESTRICT;

Sinon, pour le trigger, j'aurais fait :

create function verifier_ville() returns trigger as $verif_ville$
declare
ville_ajoutee varchar;
tst varchar;
begin
ville_ajoutee := NEW.mus_nm_mun;
select into tst mus_nm_mun from admin where mus_nm_mun like ville_ajoutee;
if not found then ....

Le nom de la table est-il vraiment en capitales ? Dans ce cas il faut bien mettre les "" .
Des experts ne sont pas loin, ils auront sûrement de meilleures suggestions.

#55 Re : Général » [Résolu]Recherche hébergement mutualisé pour back-office » 27/08/2012 13:10:20

Nous avons utilisé un certain temps Planet Hoster : http://www.planethoster.net mais ils ont Pg 8.4 et nous avions besoin de la réplication.
Nous sommes passés en dédié chez online.net et ovh .

#56 Re : Général » Caractères accentués dans psql » 23/08/2012 00:10:52

C'est bien l'article que j'avais lu.
Voici les résultats des commandes :

locale -a

C
C.UTF-8
en_US.utf8
fr_FR
fr_FR@euro
fr_FR.iso88591
fr_FR.iso885915@euro
fr_FR.utf8
fr_FR.utf8@euro
POSIX
LD_PRELOAD=lib/libreadline.so.5 psql
ERROR: ld.so: object 'lib/libreadline.so.5' from LD_PRELOAD cannot be preloaded: ignored.
pkg -l postgresql-common
Souhait=inconnU/Installé/suppRimé/Purgé/H=à garder
| État=Non/Installé/fichier-Config/dépaqUeté/échec-conFig/H=semi-installé/W=attend-traitement-déclenchements
|/ Err?=(aucune)/besoin Réinstallation (État,Err: majuscule=mauvais)
||/ Nom                                                Version                                            Description
+++-==================================================-==================================================-====================================================================================================================
ii  postgresql-common                                  129                                                PostgreSQL database-cluster manager

Après ça , j'ai installé le paquet libreadline-dev et cherché la librairie.
Ca marche en faisant : LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libreadline.so psql
J'ai fait un alias "psqlx=LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libreadline.so psql"

Sur le fond du problème, pg doit continuer à utiliser libedit pour une histoire de licence, si j'ai bien compris le rapport de bug ?
Pas de solution plus élégante en vue ?

#57 Re : Général » Caractères accentués dans psql » 21/08/2012 21:28:36

Exactement . select 'é' ne marche pas, ou update xxx set xx='é'. Dans un fichier sql, pas de souci.
J'avais lu un article là-dessus, mais je n'arrive plus à le retrouver.

#58 Général » Caractères accentués dans psql » 21/08/2012 17:22:41

MitsuTomoe
Réponses : 5

Bonjour,
je viens d'installer pg 9.1.5 et j'espérais que l'impossibilité de saisir des caractères accentués dans psql (sous ubuntu 12.04) aurait disparu. Hélas, il n'en est rien.
Ce n'est pas très grave (l'affichage est bon et je peux saisir autrement) mais un peu ennuyeux.
Savez-vous si ce sera corrigé en 9.2 ? Il me semble avoir lu un article disant que ce n'était pas vraiment pg , mais une bibliothèque utilisée
pour pouvoir rappeler les dernières commandes (readline ? readlinen ?) .
Quelqu'un aurait-il des lumières sur cette question ?

Merci

#59 Re : Optimisation » optimisation requette full text ne pas metre a jour toute la table » 20/08/2012 14:05:20

Il n'y a pas de problême de boucle infinie avec les triggers sur update (heureusement) .
D'après ce que j'ai compris, le fonctionnement est le suivant :
1) un update est fait sur la table
2) PG déclenche le trigger avec la nouvelle ligne dans la variable record NEW et les anciennes dans la variable record OLD.
3) La fonction exécutée par le trigger fait son traitement, et un RETURN NEW si tout va bien. RETURN NULL fait échouer l'update.
Ce traitement peut comprendre des mises à jour , et ne va pas redéclencher le trigger.
Exemple d'une fonction appelée dans l'update de la plupart de nos tables :
DECLARE
nom_base varchar;

BEGIN

       SELECT INTO nom_base current_database();

        NEW.dat_tran := current_timestamp;

        NEW.user_db_tran := nom_base;

        RETURN NEW;

    END;

#60 Re : Optimisation » optimisation requette full text ne pas metre a jour toute la table » 20/08/2012 09:33:06

Bonjour,
bien qu'inexpérimenté sur Pg, j'ai eu récemment à faire de la recherche full text.
Voici comment j'ai procédé :
dans la table concernée, 2 champs ==>
keywords text,
    tsv tsvector,

1 index : CREATE INDEX tsv_idx2 ON bien USING gin (tsv);

Le champ keywords est renseigné par une fonction plPgSQL en insert/update, tsv est utilisé pour la recherche.

2 triggers :
pour renseigner keywords :
CREATE TRIGGER bien_keywords BEFORE INSERT OR UPDATE ON bien FOR EACH ROW EXECUTE PROCEDURE bien_keywords();
pour mettre à jour tsv :
CREATE TRIGGER tsvectorupdate BEFORE INSERT OR UPDATE ON bien FOR EACH ROW EXECUTE PROCEDURE tsvector_update_trigger('tsv', 'pg_catalog.french', 'keywords');

Je pense que c'est ce dernier trigger qui vous intéresse .

Pour les recherches (en php), je fais une boucle sur les mots saisis par l'utilisateur que je concatène dans la requête :
$mkeysel = "AND bien.tsv @@ to_tsquery('";
$mkeysel = $mkeysel.$mk;
$mkeysel = $mkeysel."')";

En espérant vous avoir aidé

#61 Re : Sécurité » Traces modifs » 16/08/2012 15:53:18

Tracer les modifs/suppressions de tables/colonnes/vues dans le dictionnaire.

#62 Re : Sécurité » Traces modifs » 16/08/2012 13:02:49

Question subsidiaire : s'il est possible de créer des triggers sur les tables système, survivront-ils à une mise à jour de Pg ?

#63 Re : Sécurité » Traces modifs » 16/08/2012 13:01:15

Effectivement à la réflexion,je pense plutôt à une mauvaise manip d'un stagiaire qu'à de la malveillance.

#64 Re : Sécurité » Traces modifs » 16/08/2012 12:59:23

Est-il possible de créer des triggers sur les tables système ?

#65 Sécurité » Traces modifs » 16/08/2012 11:44:19

MitsuTomoe
Réponses : 7

Bonjour,
je pense avoir un problème de sécurité sur ma base de développement. Ce matin, 2 vues avaient disparu, alors qu'elles étaient présentes dans la sauvegarde quotidienne de la nuit dernière.
J'ai changé le password et récupéré mes vues de la sauvegarde. Pg garde-t-il des traces quelque part de ce genre d'évènement ?

#66 Re : PL/pgSQL » Boucle sur plusieurs vues » 13/08/2012 20:28:24

Ca marche super . J'ai juste corrigé "tbl.relname" en "tbl" .
Merci, je ne connais pas encore le méta-dictionnaire et n'ai pas le réflexe de l'utiliser.
Ca viendra smile

#68 PL/pgSQL » Boucle sur plusieurs vues » 11/08/2012 18:11:08

MitsuTomoe
Réponses : 5

Bonjour,
j'ai une fonction qui doit boucler sur plusieurs vues d'une même table pour insérer des alertes dans une autre table.
Le traitement est identique, à un libellé près.
Est-il possible de ne pas dupliquer le traitement en ayant la liste des vues dans un tableau, ou avec un execute ?
Mes recherches n'ont rien donné.

Mon code actuel :

delete from agenda where typ_event = 3;
FOR vmandat IN SELECT * FROM v_mandat_renouv LOOP
... trt ...
  vdesc :="blabla";
  INSERT into agenda...
END LOOP;

FOR vmandat IN SELECT * FROM v_mandat_fin_exclu LOOP
... trt ...
  vdesc := "blibli";
  INSERT into agenda...
END LOOP;

J'ai le traitement de 3 autres vues à ajouter .
Merci pour vos idées

#69 Re : Général » Changement répertoire données » 06/08/2012 17:08:39

C'est fait, aucun souci. Je craignais que ce soit plus compliqué/risqué . Merci pour vos conseils.

Alex

#70 Général » Changement répertoire données » 06/08/2012 14:16:35

MitsuTomoe
Réponses : 2

Bonjour,
je vais devoir changer une base pg 9.1 de partition sous Ubuntu 12.04  . Quelles sont les étapes recommandées ?
Faut-il créer un nouveau cluster ?
Bien entendu, j'ai des sauvegardes au cas où...
Le cluster actuel :

Version Cluster   Port Status Owner    Data directory                     Log file
9.1     main      5432 online postgres /var/lib/postgresql/9.1/main       /var/log/postgresql/postgresql-9.1-main.log

Merci

#71 Re : Optimisation » Optimisation table » 30/07/2012 16:49:20

Finalement, il faudra plutôt compter sur 1 million de lignes dans la table d'ici quelques mois, et 150000 immédiatement.
Est-ce que ça change quelque chose ?

#72 Re : Sécurité » Angoisse existentielle » 14/07/2012 01:23:21

Les mots de passe sont assez compliqués(lettres et chiffres), et l'utilisateur public n'est pas superutilisateur.
Je vais dormir (un peu) plus tranquille.
Merci

#73 Sécurité » Angoisse existentielle » 13/07/2012 22:48:49

MitsuTomoe
Réponses : 6

Bonjour,
notre société est à 2 semaines de son démarrage en production et je me pose des questions existentielles sur la sécurité de la base.
Voici mon pg_hba.conf :
local   all             postgres                                peer
local   all             all                                     md5
host    all             all             127.0.0.1/32            md5
host    all             all             ::1/128                 md5
host    replication     replic          xx.xx.xx.xx/32          md5
host    xxxxxxxxx   postgres        xx.xx.xx.xx/32          md5

Est-ce que c'est assez blindé pour un site Internet ?
Est-il conseillé de changer le port par défaut de postgres ?
La base est propriété de postgres, mais j'ai laissé les tables propriété du rôle d'accès public à la base.
Est-ce une erreur ?
Toutes les tables sont dans le schéma public, pas de pb ?
Quelles sont les erreurs classiques des débutants sur Pg niveau sécurité ?
Quelles sont les attaques classiques sur pg , au delà de l'injection sql ? Il n'y a ni phppgadmin, ni pgadmin en prod.

Merci pour votre patience et vos conseils, je fais des cauchemars où la base est piratée au bout d'une semaine...

#74 Re : Général » Supprimer séquences orphelines » 11/07/2012 15:30:23

Je viens d'essayer sur cette table et ça marche . J'ai du confondre 2 noms ?
Désolé pour le bruit.

#75 Re : Général » Supprimer séquences orphelines » 11/07/2012 15:17:02

Je crée les tables dans phpPgAdmin et je met la PK en serial, ça crée la séquence automatiquement.
Si j'exporte une table, j'ai par exemple :
CREATE SEQUENCE pige_site_id_site_seq
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;
ALTER TABLE public.pige_site_id_site_seq OWNER TO conclavi;
ALTER SEQUENCE pige_site_id_site_seq OWNED BY pige_site.id_site;
SELECT pg_catalog.setval('pige_site_id_site_seq', 1, true);
ALTER TABLE ONLY pige_site ALTER COLUMN id_site SET DEFAULT nextval('pige_site_id_site_seq'::regclass);

Pied de page des forums

Propulsé par FluxBB