samedi 23 mai 2015

PostgreSQL: Trouver des doublons dans une table

Dans PostgreSQL, il existe les window functions qui permettent de faire des calculs sur un ensemble d'éléments liés aux éléments courants. Dans le cas présent, nous allons demander à PostgreSQL de regrouper les éléments en fonction de la valeur de deux champs.

  • Jeu de test :
CREATE TABLE double (id serial PRIMARY KEY, name text, value int );
INSERT INTO double (name, value) VALUES ('nom1', 1);
INSERT INTO double (name, value) VALUES ('nom1', 2);
INSERT INTO double (name, value) VALUES ('nom1', 3);
INSERT INTO double (name, value) VALUES ('nom2', 1);
INSERT INTO double (name, value) VALUES ('nom2', 2);
INSERT INTO double (name, value) VALUES ('nom2', 3);
INSERT INTO double (name, value) VALUES ('nom3', 1);
INSERT INTO double (name, value) VALUES ('nom1', 1);
INSERT INTO double (name, value) VALUES ('nom1', 1);


Nous allons maintenant rechercher les doublons sur le couple nom, valeur.

SELECT * FROM ( SELECT id, name, row_number() OVER (PARTITION BY name, value ORDER BY id ASC ) AS dup FROM double ) AS w WHERE dup > 1;
  • Voici le résultat
[local]/test =# SELECT * FROM (SELECT id, name, row_number() OVER (PARTITION BY name, value ORDER BY id ASC) AS dup FROM double) AS pwet WHERE dup > 1; 
id │ name │ dup 
───┼──────┼───── 
 8 │ nom1 │ 2 
 9 │ nom1 │ 3 
(2 lignes) 
  • On peut ensuite imaginer une requête qui supprime les doublons :
DELETE FROM double WHERE id IN ( SELECT id FROM ( SELECT id, name, row_number() OVER (PARTITION BY name, value ORDER BY id ASC) AS dup FROM double ) AS w WHERE dup > 1 ); 
DELETE 2 Temps : 65,681 ms 

dimanche 26 avril 2015

Mise en place de firewalld

IntroductionFirewallD est une surcouche à Iptables installée par défaut sur RedHat 7 et CentOS 7. Contrairement aux anciens modèles de parefeux (system-config-firewall/lokkit), chaque changement nécessitait un redémarrage complet du parefeu.FirewallD récupère les informations sur les règle parefeu  […]

Lire la suite

mardi 12 août 2014

Pypi Mirroring

Installation d'un mirroir Pypi Local$ROOTDIR = Répertoire de stockage du projet.Création d'un virtualenv pour héberger le projetvirtualenv pypimirror Installation de pypimirrorsource pypimirror/bin/activate pip install pypimirror Depuis la version 1.0.15, il est demandé d'installer BeautifulSoup en  […]

Lire la suite

mercredi 14 mai 2014

Installation de PostgreSQL via YUM

Note : Toute cette procédure est applicable pour Centos61. Configurer le dépôt officiel rpm -ivh http://yum.postgresql.org/9.3/redhat/rhel-6-x86_64/pgdg-centos93-9.3-1.noarch.rpm 2. Installer les paquets nécessaires yum install postgresql93 postgresql93-server postgresql93-contrib  […]

Lire la suite

dimanche 24 novembre 2013

Utilisation de Fabric sous Windows

PrérequisUne version fonctionnelle de python. L'installation de Fabric nécessite pycrypto qui est assez compliqué à compiler.J'ai donc préféré chercher des binaires précompilés sur le net pycrypto-2.3.1.win7x64-py2.7x64.7z.Décompresser l'archive à la racine du virtualenv utilisé pour  […]

Lire la suite

Python sous windows

InstallationPour commencer télécharger l'installeur python2.7 sur le site officiel [http://python.org/ftp/python/2.7.4/python-2.7.4.msi](http://python.org/ftp/python/2.7.4/python-2.7.4.msi)Mise en place de setuptool et pipAfin de faciliter l'installation des paquets python, il faut installer  […]

Lire la suite

lundi 18 novembre 2013

Authentification PostgreSQL pour Proftpd

Préparation de la base PostgreSQL Création de l'utilisateur  CREATE USER ftp LOGIN ENCRYPTED PASSWORD 'sup3rs3cret';  Création de la base  CREATE DATABASE ftpuser OWNER ftp;  Création des tables  CREATE TABLE users ( pkid serial PRIMARY KEY, userid text NOT NULL UNIQUE, passwd text, uid int, gid  […]

Lire la suite

vendredi 2 août 2013

MySQL Procédures Stockées

J'ai eu besoin, dans le cadre d'un projet, de supprimer des lignes sur certaines tables contenant un ID spécifique. Cette manipulation devant se faire régulièrement, une procédure stockée a été créée.  DELIMITER $$  DROP PROCEDURE IF EXISTS DeleteOrphan$$  CREATE PROCEDURE DeleteOrphan(IN hwid INT)  […]

Lire la suite

lundi 16 juillet 2012

PostgresSQL - Suppression de tables en fonction du Owner

Suite à une fausse manipulation, j'ai importé l'ensemble de mes bases de données dans la base template1. Conséquence, toutes les nouvelles bases de données créées le seraient avec le schéma de toutes les autres bases. C'est moche ! Le nombre de table étant importantes, j'ai donc créé une procédure  […]

Lire la suite

samedi 2 juin 2012

Serveur Bind en master / slave

Installer bind via l'outil de gestion de paquet du système (apt / yum / emerge)     apt-get/yum install named     emerge -av bind   Configuration du Master  Génération de la clé de transfert entre NS1 et NS2     /usr/sbin/dnssec-keygen -a HMAC-MD5 -b 512 -r /dev/urandom -n HOST ns2 Fichier  […]

Lire la suite

dimanche 15 avril 2012

Migration d'une base Zabbix de MySQL vers PostgreSQL

Création de la base sous PostgreSQLCREATE ROLE zabbix PASSWORD 'pass' LOGIN; CREATE DATABASE zabbix OWNER zabbix Import du schéma Zabbix>psql -U zabbix zabbix < /usr/share/zabbix/database/create/postgresql.sql Export des datas MySQL dans un format compatible avec PostgreSQLmysqldump --compact  […]

Lire la suite

lundi 27 février 2012

Installation de Nginx sur une Gentoo

Installation de NginxNginx est un concurent d'apache qui est beaucoup plus performant que ce dernier. http://www.first-world.info/apache-vs-lighttpd-vs-nginx.html Voici comment installer Nginx sous Gentoo ...Compilation de nginx#Installation de vim-syntax avec nginx :-)     echo  […]

Lire la suite

Installation de PostgreSQL à partir des sources

Récupération des sourceswget http://ftp.postgresql.org/pub/source/v9.1.2/postgresql-9.1.2.tar.gz tar xvzf postgresql-9.1.2.tar.gz Compilation des sourcescd postgresql-9.1.2 ./configure --prefix=/opt/postgresql-9.1.2 make -j2 && make install Initialisation de la base.useradd -d  […]

Lire la suite

dimanche 26 février 2012

Installation D'une Gentoo Sur Dedibox SC

Me voila heureux possesseur d'une Dédibox SC. Mais la liste des OS disponibles dans la console d'installation ne me conviens pas du tout. J'ai donc décidé d'installer mon OS préféré, une gentoo.Etape 1 : Booter en mode rescueCette étape permets d'avoir accès au système car de base le serveur est  […]

Lire la suite