Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/10/2006, 17h05   #1
Invité de passage
 
Inscription : octobre 2006
Messages : 3
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 3
Points : 0
Points : 0
Envoyer un message via Yahoo à filomena
Par défaut comment créer une nouvelle table à partir de différentes tables existante?

Bonjour,
J'ai une grosse base de données postgres sur un même serveur, et pour simplifier le travail, je veux récupérer des différentes tables les données intéressantes (les colonnes). pour les regrouper dans 1 seule table.
J'ai procédé ainsi :

CREATE TYPE essai AS (user_id varchar, username varchar, First_Names varchar, Last_name varchar, company_id varchar, company_name varchar, rate varchar, project_id varchar, project_name varchar);

CREATE OR REPLACE FUNCTION transform_table() RETURNS SETOF essai AS
$BODY$
DECLARE
rec record;
o essai;
BEGIN
FOR rec IN SELECT user_id FROM acs_users_all GROUP BY user_id ORDER BY user_id
FOR rec IN SELECT company_id FROM companies
LOOP
o.user_id:=rec.user_id;
SELECT* INTO o.username, o.First_Names, o.Last_name FROM acs_users_all WHERE user_id = rec.user_id;

SELECT* INTO o.company_name FROM companies WHERE company_id = rec.company_id;

o.project_id:=rec.project_id;
SELECT*INTO o.project_name FROM projects WHERE project_id = rec.project_id;

o.user_id:=rec.user_id;
SELECT *INTO o.rate FROM TABLE_java WHERE user_id = rec.user_id;

RETURN NEXT o;

END LOOP;
RETURN ;
end;
$BODY$
LANGUAGE 'plpgsql' ;

mes message d'erreur sont :
ERROR: record "rec" is not assigned yet
DETAIL: The tuple structure of a not-yet-assigned record is indeterminate.
CONTEXT: PL/pgSQL function "transform_table" line 5 at for over select rows

Je ne pense pas que ce soit une très bonne methode ? est ce que je dois utiliser dblink?
Merci
filomena est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2006, 20h05   #2
Membre chevronné
 
Avatar de Spoutnik
 
Homme
Inscription : octobre 2003
Messages : 668
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : Etats-Unis

Informations forums :
Inscription : octobre 2003
Messages : 668
Points : 746
Points : 746
Citation:
Envoyé par filomena
Bonjour,
J'ai une grosse base de données postgres sur un même serveur, et pour simplifier le travail, je veux récupérer des différentes tables les données intéressantes (les colonnes). pour les regrouper dans 1 seule table.
Ce que tu décris est une vue. A moins que tu n'ai vraiment besoin de travailler sur une copie des donnée.
J'ai un peu de mal à voir ce que tu veux obtenir comme données, mais il y a déjà des erreurs de syntaxe :
-Après le premier FOR, il n'y a pas de LOOP, ni de END LOOP correspondant.
- la variable 'rec' est utilisée 2 fois (premier et 2eme for), hors, ensuite, tu fais référence soit au premier, soit au deuxième.
-je ne suis pas sur que "o.user_id:=rec.user_id;" soit uen syntaxe très correcte (pas de création de "l'object" o à priori)
- tu gagenrais à faire un select * into o + l'ensemble de test données (1 seule select + jointures pour récupérer toues tes données et ttes tes lignes en 1 seule fois)

Si tu veux un peu plus d'aide, indique les 'create tables' stp


Citation:
Envoyé par filomena
est ce que je dois utiliser dblink?
Merci
DBlinbk est, il me semble, fait pour faire des requetes entre des bases de données différentes, ce qui ne semble pas être ton cas.

++
__________________
Two beer or not two beer. (Shakesbeer)
Question technique par MP => poubelle!
Spoutnik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2006, 09h32   #3
Invité de passage
 
Inscription : octobre 2006
Messages : 3
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 3
Points : 0
Points : 0
Envoyer un message via Yahoo à filomena
Par défaut merci

J'ai compris mon erreur, c'est pratiquement impossible de créer une nouvelle table dans ma base de données regroupant des données de différentes tables(que j'appelle base1).
C'est pour cette raison que j'ai créer une autre base(base2), que je connecte à la première (base1) avec Jitterbit.
Je crois que je me suis compliquée la vie avec le petit programme ci dessous. Merci de m'avoir répondu.
A bientot
filomena est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2006, 11h03   #4
Invité régulier
 
Inscription : septembre 2006
Messages : 25
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 25
Points : 6
Points : 6
Salut,

j'ai exactement le meme problème que toi. Ca m'aiderait vraiment de savoir comment tu as procédé pour le résoudre.

Merci d'avance.
odi_9 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2006, 09h51   #5
Invité de passage
 
Inscription : octobre 2006
Messages : 3
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 3
Points : 0
Points : 0
Envoyer un message via Yahoo à filomena
j'ai téléchargé jitterbit (il est gratuit). Jitterbit est un soft qui permet de récupérer les données d'un base 1 et de la transférer dans une base 2.

Pour conmmencer, j'ai créer un base de donnée 2. J
'ai télécharger jiiterbit et mis en place, je connecte jitterbit à mes serveur.
Et je rentre le fichier source (baseA) puis le fichier targuet(base B) (comme il est appelé sur jitterbit), et je fait une nouvelle transformation.
Dans la transformation, je relie ma base A à ma base B, en glissant les données d'une fenetre à une autre.
Ensuite une operation. Je teste l'opération, et ensuite je load les tables. Et c'est fini.
filomena est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h45.


 
 
 
 
Partenaires

Hébergement Web