Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#1 25/06/2014 16:20:46
- Dezqs
- Membre
Migration Oracle vers PostgreSQL - procédures stockées
Bonjour,
Actuellement en pleine migration d'oracle vers postgre, je suis confronté à un problème de type dans de nombreuses procédures stockées.
En effet, dans oracle, les colonnes et les procédures utilisaient le type "Number"...
Suite à la migration, mes colonnes sont donc maintenant du type real, bigint, double precision,... et les paramètres (numériques) des procédures de type "bigint"
Pour simplifier la modification des procédures stockées, je voulais savoir s'il était possible de modifier les colonnes de types "real" afin qu'elles soient de type "double precision" et quels seraient les éventuels impacts ?
Merci
Hors ligne
#2 25/06/2014 22:30:57
- gleu
- Administrateur
Re : Migration Oracle vers PostgreSQL - procédures stockées
Vous pouvez le faire, notamment avec ora2pg.
Guillaume.
Hors ligne
#3 26/06/2014 09:24:58
- Dezqs
- Membre
Re : Migration Oracle vers PostgreSQL - procédures stockées
Bonjour,
Ora2Pg a déjà été utilisé. Ce que je souhaite faire c'est un alter table pour modifier mes colonnes de type "real" en "double precision" et savoir quels seraient les éventuels impacts.
En effet, ça me simplifierais la tâche pour la modification de mes procédures de n'avoir à gérer que les types "bigint" et "double precision"...
J'espère être assez clair...
Merci
Hors ligne
#4 27/06/2014 23:57:43
- gleu
- Administrateur
Re : Migration Oracle vers PostgreSQL - procédures stockées
real est sur 4 octets alors que double precision est sur 8 octets. Donc déjà, vous doublez la place prise pour stocker ces types de données. En dehors de cela, je ne connais aucun autre impact.
Guillaume.
Hors ligne
#5 28/06/2014 12:48:43
- cedric
- Membre
Re : Migration Oracle vers PostgreSQL - procédures stockées
Ce que je souhaite faire c'est un alter table pour modifier mes colonnes de type "real" en "double precision" et savoir quels seraient les éventuels impacts.
En effet, ça me simplifierais la tâche pour la modification de mes procédures de n'avoir à gérer que les types "bigint" et "double precision"...
Merci
L'impact est principalement applicatif, la précision change.
# select 1.12345::real = 1.12345::double precision;
renvoie false.
Donc en appliquant des conversions vous allez potentiellement obtenir des égalités là où il ne devrait pas y en avoir. On n'utilise habituellement pas ces types de données pour ce genre d'opération ceci dit.
Si l'applicatif est compatible avec ce changement, en effet, coté PostgreSQL, l'impact est sur le volume de stockage, modulo ce qui suit.
Attention aussi aux fonctions d’agrégation statistique qui vont être affectées par le format de stockage initial (avg, variance, stddev, ...):
# create table foo
as select ('1.'||n)::real as s,('1.'||n)::double precision as d from generate_series(1,99999) g(n);
# select avg(s),avg(d) from foo;
avg | avg
------------------------+----------------
1.54997749977667 | 1.549977499775
# alter table foo alter COLUMN s type double precision;
# select avg(s),avg(d) from foo;
avg | avg
------------------+----------------
1.54997749977667 | 1.549977499775
NOTE: les fonctions de stats retournent "double precision" dans tous les cas de paramètres flottant en entrée, on note que le résultat est différent ci-dessus alors que:
# truncate table foo;
# insert into foo select ('1.'||n)::double precision as s,('1.'||n)::double precision as d from generate_series(1,99999) g(n);
# select avg(s),avg(d) from foo;
avg | avg
----------------+----------------
1.549977499775 | 1.549977499775
Donc peut-être auriez-vous intérêt à caster lors de l'import initial, et pas dans un second temps.
Cédric Villemain +33 (0)6 20 30 22 52
http://2ndQuadrant.fr/
PostgreSQL: Support 24x7 - Développement, Expertise et Formation
Hors ligne
#6 30/06/2014 10:19:21
- Dezqs
- Membre
Re : Migration Oracle vers PostgreSQL - procédures stockées
Bonjour,
Merci pour vos réponses.
Pour l'augmentation du volume de stockage je m'en doutais, mais ce ne sera pas forcément dérangeant dans notre cas.
Par contre je n'avais pas du tout pensé aux problèmes liés aux conversions...
Mais il me semble que les procédures n'utilisent pas de fonctions d’agrégations statistiques.
Après je suis d'accord sur le fait que la conversion aurait pu être réalisée en amont, coté applicatif, mais j'aurais quand même dû modifier les déclarations des procédures car depuis la migration tout les paramètres de type "number" d'oracle ont été remplacés par "bigint"...
En tout cas merci pour vos réponses
Dernière modification par Dezqs (30/06/2014 10:19:48)
Hors ligne