Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#1 03/04/2019 22:23:43
- Anthony_Bayonne
- Membre
dblink : copier les nouvelles entrées d'une table vers une autre base
Bonjour / Bonsoir,
je suis confronté à un problème "simple" en apparence mais qui me cause beaucoup de soucis, peut être pourriez-vous m'aider.
La base de données que j'utilise est surchargée. L'idée, c'est d'utiliser 2 bases : une qui supporte les requêtes, et une autre uniquement pour l'affichage. Toutes les heures, la base de requêtes met à jour ses données vers la base d'affichage.
Illustration :
test_dblink_reception
id | title
1 | Hi, I'm first here :)
test_dblink_emission
id | title
1 | Hi, I'm a data !
2 | hehe I'm second row !
3 | Wait me, I'm 3 !
4 | Hi friends, I'm 4
Ce que j'aimerais réussir à faire :
test_dblink_reception
id | title
1 | Hi, I'm first here :)
2 | hehe I'm second row !
3 | Wait me, I'm 3 !
4 | Hi friends, I'm 4
En bonus : supprimer les entrées transférées de la table d'origine, c'est possible en une seule requête ?
test_dblink_emission
id | title
1 | Hi, I'm a data !
Voilà la requête qui résume ou j'en suis :
SELECT
test_dblink_reception.id,
requete.id,
requete.title
FROM
test_dblink_reception,
dblink('host=myhost user=user password=password dbname=database2', 'SELECT id, title FROM test_dblink_emission') AS requete (id int,
title text)
GROUP BY
test_dblink_reception.id,
requete.id,
requete.title
HAVING
max(test_dblink_reception.id) < requete.id
Retour :
id | id | title
1 | 2 | hehe I'm second row !
1 | 3 | Wait me, I'm 3 !
1 | 4 | Hi friends, I'm 4
Le problème, c'est la première colonne, "id", que je ne souhaite pas insérer dans ma requête INSERT INTO, mais Postgres m'impose de la mettre dans le GROUP BY.
Est-ce que selon-vous c'est la meilleure façon de procéder ? Comment faire pour obtenir ce résultat sans le test_dblink_reception.id dans le GROUP BY ?
En vous remerciant,
Anthony
Hors ligne
#2 03/04/2019 22:45:16
- rjuju
- Administrateur
Re : dblink : copier les nouvelles entrées d'une table vers une autre base
À moins que j'ai mal compris, pourquoi ne pas tout simplement supprimer test_dblink_reception.id de la clause SELECT ?
Julien.
https://rjuju.github.io/
Hors ligne
#3 03/04/2019 23:08:35
- Anthony_Bayonne
- Membre
Re : dblink : copier les nouvelles entrées d'une table vers une autre base
t'es un génie omg
Hors ligne
#4 04/04/2019 21:51:00
- gleu
- Administrateur
Re : dblink : copier les nouvelles entrées d'une table vers une autre base
(Pour répondre à votre signalement, il aurait été mieux de le placer dans Général, vu que ça n'a strictement rien à voir avec de la réplication, mais c'est pas bien grave)
Guillaume.
Hors ligne
#5 05/04/2019 00:19:02
- rjuju
- Administrateur
Re : dblink : copier les nouvelles entrées d'une table vers une autre base
(il s'agit de copier des données d'un serveur à un autre, ça reste techniquement de la réplication même si c'est vrai qu'on s'attend plutôt à parler de SR/HS/slony/repli logique)
Julien.
https://rjuju.github.io/
Hors ligne
#6 05/04/2019 14:22:52
- Anthony_Bayonne
- Membre
Re : dblink : copier les nouvelles entrées d'une table vers une autre base
D'accord,
Merci pour vos éclaircissements,
comme vous pouvez le constater je suis pas encore très à l'aise avec Postgres au delà d'une utilisation "basique",
bon week-end merci pour le coup de pouce
Hors ligne