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).

#1 23/10/2015 11:26:18

psql_junior
Membre

Requêtes COPY sans doublons

Bonjour a tous,

Pour infos, je précise que je suis sur un DB 8.4.
Voilà un petit moment que je me heurte à un problème et ne trouve pas de solutions sur le forum ou le net. (Peut-être que je m'y prend mal aussi)

Je suis en charge de traiter les logs d'un réseau d'entreprise qui a été capturé dans le but de voir les différentes connexions et de fixer par la suite les règles du firewall de l'entreprise. Ces logs sont extraits sous la forme d'un document CSV, je le parse afin de ne prendre que les champs qui m'interessent. Je classe même déjà les doublons avant l'insertion dans la DB avec un compteur pour savoir les lignes identiques pour ne pas avoir du fichier trop volumineux.

Les logs sont extraits toutes les 15-20min sous forme d'un CSV pour une plage horaire de 20-30min. Du coup, je suis amené à faire plusieurs fois la requêtes COPY pour les insérer dans la DB.
Mais mon problème est le suivant à savoir que je ne trouve pas le moyen de faire les insertions dans la DB sans les doublons. Il y a souvent les mêmes lignes d'un CSV à l'autre.
Par conséquent, je souhaite savoir s'il y a possibilité de faire en sorte que les lignes identiques à chaque nouvelle insertion avec COPY soient ajoutées à mes lignes existantes dans la table et que la colonne "Hits" ( correspondant à mon compteur ) s'incrémente.

Petit schéma:

Hits   | Source_address  | Destination_address | Destination_Port |        Application        | IP_Protocol
-------+--------------------+------------------------+--------------------+-----------------------+-------------
2      | 10.10.31.231       | 10.10.31.232            | 0                      | ping                       | icmp
2      | 10.10.31.231       | 10.10.31.232            | 6191                 | unknown-tcp           | tcp
2      | 10.10.31.232       | 10.10.31.231            | 0                      | ping                       | icmp
8      | 10.10.31.232       | 10.10.31.231            | 6179                 | unknown-udp          | udp
2      | 10.10.31.232       | 10.10.31.231            | 6191                 | unknown-tcp           | tcp
236   | 10.1.140.3          | 10.195.242.245         | 0                      | ping                       | icmp
10     |10.115.197.238    | 10.195.238.37          | 443                   | incomplete              | tcp
462   | 10.115.197.238    | 10.195.238.37         | 443                   | ssl                          | tcp
7     | 10.1.200.225        | 10.195.241.157        | 5555                 | web-browsing           | tcp
2     | 10.1.200.225        | 10.195.242.245        | 80                     | subversion-base       | tcp
2     | 10.1.200.225        | 10.195.242.245        | 80                     | subversion-uploading| tcp
4     | 10.1.200.225       | 10.195.255.25          | 9087                  | incomplete                | tcp
11    | 10.1.200.225      | 10.195.255.25          | 9087                  | web-browsing            | tcp
7     | 10.1.200.225       | 10.195.255.26          | 9087                  | web-browsing            | tcp

Voilà donc la forme de ma table. Donc imaginons j'ai un nouveau fichier de log trié de la même manière qui arrive si je fais un nouveau COPY, postgres va simplement me l'afficher à la suite du précédent mais ce n'est pas ce que je recherche. J'aimerais que s'il y a des lignes identiques elles s'ajoutent à celles présentes dans la table et que la colonne "Hits" s'incrémente.

J'espère avoir été le plus clair possible et vous remercie d'avance si vous pouvez m'éclairer. Je continue de chercher de mon côté et à faire des tests.

Bonne journée.

Hors ligne

#2 23/10/2015 12:19:18

gleu
Administrateur

Re : Requêtes COPY sans doublons

COPY ne vous permettra pas ça. COPY ne fait pas de mise à jour, il fait de l'insertion.

Le mieux est certainement d'exécuter COPY sur une autre table, puis d'utiliser plusieurs requêtes pour insérer ce qui n'y est pas déjà et mettre à jour ce qui y est.


Guillaume.

Hors ligne

#3 23/10/2015 12:21:40

psql_junior
Membre

Re : Requêtes COPY sans doublons

D'accord donc recours à une table temporaire pour update la principale ?

Hors ligne

#4 23/10/2015 13:00:49

gleu
Administrateur

Re : Requêtes COPY sans doublons

Exact.


Guillaume.

Hors ligne

#5 23/10/2015 13:04:58

psql_junior
Membre

Re : Requêtes COPY sans doublons

D'accord c'était pour être sur que je n'ai pas loupé une subtilité ou un post quelque part.

Merci bien en tout cas.

Hors ligne

Pied de page des forums