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 03/04/2019 22:23:43

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 ?

Hors ligne

#3 03/04/2019 23:08:35

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 smile même si c'est vrai qu'on s'attend plutôt à parler de SR/HS/slony/repli logique)

Hors ligne

#6 05/04/2019 14:22:52

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

Pied de page des forums