Recherche
Bookmarks Labo

Identifiant :
Mot de passe :

 RSS - Forums   SujetsRV

Configuration

Authentification.

Configuration de : /etc/postgresql/8.1/main/pg_hba.conf

# Cette ligne sert a laisser les droits a un user postgres 
# utilise pour la maintenance automatique (autovacuum and cie),
local   all         postgres                          ident sameuser

# nom_utilisateur utilise les bases sans password en local uniquement.
local   all         nom_utilisateur                                        trust
host    all         nom_utilisateur    127.0.0.1         255.255.255.255   trust

#necessite un /etc/init.d/postgres restart pour la prise en compte de modif

Plus de détail ici :
http://docs.postgresqlfr.org/8.1/client-authentication.html#example-pg-hba.conf

Commande pour créer ou détruire un user :
createuser nom_utilisateur
createuser -d -a nom_utilisateur -P # demande un mot de passe, man pour plus d'info
dropuser nom_utilisateur

Config avancé

http://docs.postgresqlfr.org/8.1/runtime-config.html


Commandes

liste des bases de données
psql -l
créer base :
createdb base -O owner -E UNICODE
inserer un script sql
psql -d base < script
se connecter
psql -d base 
Apres s'être connecté, on peut utiliser des requêtes sql ou des commandes psql

Quelques commandes dans psql :
\?   /* aide psql */
\h /* aide sql */
\dt /* liste des tables */
\di /* liste des indexs */
\ds /* liste des sequences */
\du /* liste des users */
\l /* liste des bases */


\d objet /*description objet (table, index, sequence...)


\dS /* liste des tables systèmes */
\df /* liste des fonctions*/
\dd /* liste des commentaires (entre autre pour les fonctions)*/
\do /* liste des operateurs*/
\dT+ /* liste des types*/


\timing /* active le chorometrage des commandes */

\i file /*executer les commande du fichier */
\o file /*ecrire les resultats dans le fichier */


\q /* ou ctr-D pour quitter */

Exemples de commande SQL de base:

SELECT * FROM MA_TABLE;
SELECT * FROM MA_TABLE WHERE MON_CHAMP = 0;
UPDATE MA_TABLE SET MON_CHAMP = 1;
INSERT INTO MA_TABLE VALUES (1, 'text');



Exemple de commande SQL de manipulation de table
CREATE TABLE ma_table (
champ_old text,
champ_autre integer
);

ALTER TABLE ma_table ADD COLUMN mon_champ integer;
UPDATE ma_table set mon_champ = 0;
ALTER TABLE ma_table ALTER COLUMN mon_champ SET NOT NULL;

ALTER TABLE ma_table ALTER COLUMN mon_champ DROP NOT NULL;
ALTER TABLE ma_table DROP COLUMN mon_champ;
ALTER TABLE ma_table RENAME COLUMN champ_old TO champ_new;

ALTER TABLE ma_table ADD CHECK (mon_champ <> 5);
ALTER TABLE ma_table ADD CONSTRAINT autre_nom UNIQUE (no_produit);
ALTER TABLE ma_table ADD FOREIGN KEY (id_produit) REFERENCES produits;
ALTER TABLE ma_table DROP CONSTRAINT autre_nom;

DROP TABLE ma_table;
DROP TABLE ma_table CASCADE;

ALTER TABLE table_old RENAME TO table_new;

/* exemple augmentation taille de colonne */
ALTER TABLE ma_table ADD COLUMN name2 character varying(300);
update ma_table set name2=name;
ALTER TABLE ma_table DROP COLUMN name;
ALTER TABLE ma_table rename COLUMN name2 to name;
ALTER TABLE ma_table ALTER COLUMN name SET NOT NULL;





 

Sauvegarde et restauration.

archivage d'une base posgressql avec :

pg_dump nombase -f nomfichier
remplissage base avec :
$ psql -d nombase -f nomfichier
même chose en compressé
archivage
pg_dump -Ft -b mydb > db.tar
rechargement
pg_restore -d newdb db.tar

 

Sequences

Quelques requetes sql.
Creation de compteur :

CREATE SEQUENCE moncompteur;
Increment et renvoie la valeur du compteur :
SELECT nextval('moncompteur');
Renvoie la valeur du compteur :
SELECT currval('moncompteur');
Reinitialise un compteur :
SELECT setval('moncompteur',valeur);
Destruction du compteur :
DROP SEQUENCE moncompteur;
Destruction du compteur (ne provoque pas d'erreur si le
compteur n'existe pas) :
delete from pg_type where typname='myseq';
delete from pg_class where relname='myseq';

Indexation full texte

J'utilise ici tsearch 2
http://www.sai.msu.su/~megera/postgres/gist/tsearch/V2/
http://www.sai.msu.su/~megera/postgres/gist/tsearch/V2/docs/tsearch-V2-intro.html

SYSTEM

Installation

apt-get install postgresql-contrib-8.1 ifrench-gut wfrench

Initialisation

psql pressblog < /usr/share/postgresql/8.1/contrib/tsearch2.sql

SQL

Index simple

ALTER TABLE ma_table ADD COLUMN mon_index_fti tsvector;
UPDATE ma_table SET mon_index_fti=to_tsvector('default', mon_champ);
VACUUM FULL ANALYZE;
CREATE INDEX mon_index_fti_idx ON ma_table USING gist(mon_index_fti);
VACUUM FULL ANALYZE;
Trigger pour indexation a la volée
CREATE TRIGGER mon_trigger BEFORE UPDATE OR INSERT ON ma_table
FOR EACH ROW EXECUTE PROCEDURE tsearch2(mon_index_fti, mon_champ);

Index multiple sur une table

ALTER TABLE ma_table ADD COLUMN mon_index_fti tsvector;
UPDATE ma_table SET mon_index_fti=to_tsvector('default', coalesce(champ_1,'') ||' '|| coalesce(champ_2,''));
VACUUM FULL ANALYZE;
CREATE INDEX mon_index_fti_idx ON ma_table USING gist(mon_index_fti);
VACUUM FULL ANALYZE;
Trigger pour indexation a la volée
CREATE TRIGGER mon_trigger BEFORE UPDATE OR INSERT ON ma_table
FOR EACH ROW EXECUTE PROCEDURE tsearch2(mon_index_fti, champ_1, champ_2);

Pour que le trigger fonctionne, avant un UPDATE ou INSERT,
il faudra lancer la requete suivante

select set_curcfg('default');  

Recherches

SELECT * FROM ma_table WHERE mon_index_fti @@ to_tsquery('texteachercher')::tsquery;

SELECT * FROM ma_table WHERE mon_index_fti @@ to_tsquery('mot1 | mot2')::tsquery;

SELECT * FROM ma_table WHERE mon_index_fti @@ to_tsquery('mot1 & mot2')::tsquery;

SELECT * FROM ma_table WHERE mon_champ ~* '.*phrase a chercher.*';