Vous n'êtes pas identifié(e).
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
Merci pour l'info
Alex
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
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.
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 .
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 ?
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.
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
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;
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é
Tracer les modifs/suppressions de tables/colonnes/vues dans le dictionnaire.
Question subsidiaire : s'il est possible de créer des triggers sur les tables système, survivront-ils à une mise à jour de Pg ?
Effectivement à la réflexion,je pense plutôt à une mauvaise manip d'un stagiaire qu'à de la malveillance.
Est-il possible de créer des triggers sur les tables système ?
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 ?
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
Merci , je vais essayer .
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
C'est fait, aucun souci. Je craignais que ce soit plus compliqué/risqué . Merci pour vos conseils.
Alex
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
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 ?
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
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...
Je viens d'essayer sur cette table et ça marche . J'ai du confondre 2 noms ?
Désolé pour le bruit.
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);