Pour loguer uniquement dans le fichier de log la durée d'une requêtes qui dure plus de x millisecondes , il faut modifier le fichier de configuration postgresql.conf.

Chercher et modifier les valeurs des variables dans postgresql.conf :

  • log_statement = 'none'
  • log_duration = off
  • log_min_duration_statement = <valeur_en_millisecondes>

Exemple pour toutes requêtes supérieures à 4 secondes mettre :

 

log_statement = 'none'

log_duration = off

 

log_min_duration_statement = 4000

Pour une meilleur lisibilité, vou pouvez paramétrer la variable : log_line_prefix

exemples :

  1. log_line_prefix = '%m %d '
  2. log_line_prefix = '%t %d '

Explication des valeurs :

  •  %d : nom de la base de données ,
  • %m : date allant jusqu'à la miliseconde ,
  • %t ; date sans les millisecondes

Pour copier une base de données en une commande sur le même moteur postgresql.

  • Copie à l'identique, utilisez la commande sql :
    create database <nom_nouvelle_base> with template <base_convoitée> ;
  • Copie en changeant le tablespace et le propriétaire , utilisez la commande sql :
    create database <nom_nouvelle_base> with template <base_convoitée> tablespace <nouveau_tablespace> owner <nouveau_propriétaire>;

Sur le modèle ci-dessus on peut changer soit le tablespace uniquement soit le propriétaire uniquement ou les deux...

Le but est de récupérer le résultat d'une requête dans un fichier dans un format particulier :

Pré-requis : se connecter avec un compte superuser, et aller dans la base concernée.

  •  Format csv avec entête des colonnes :

requête :

copy (<ecrire_ici_la_requête>) to '</directory/du/fichier/résultat.csv>' with header csv ;

ex : copy (select * from alf_content_url ) to '/tmp/test.csv' with header csv ;

  • Format csv sans entête des colonnes :

requête :

copy (<ecrire_ici_la_requête>) to '</directory/du/fichier/résultat.csv>' with csv ;

ex : copy (select * from alf_content_url ) to '/tmp/test.csv' with csv ;

  •  Format texte avec entête des colonnes et séparateur de notre choix :

requête :

copy (<ecrire_ici_la_requête>) to '</directory/du/fichier/résultat.txt>' with header delimiter '<symbole>' csv ;

ex : copy (select * from alf_content_url ) to '/tmp/test.txt' with header delimiter '|' csv ;

Pour tuer une requête il y a deux possibilité :

  1. par une commande shell
  2. par une commande sql

 

  • Par la commande shell kill :
    • kill <pid_process>

 /!\ NE JAMAIS FAIRE un kill -9 /!\

  • Par une commande sql :
    • commancer par la commande : select pg_cancel_backend(<pid_process>)
    • si cela n'est pas suffisant passer la commande : pg_terminate_backend(<pid_process>)