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 13/08/2013 15:06:17

atchopba
Membre

Valeur par defaut

Bonjour,

pendant une migration automatique de MySQL vers PostgreSQL, une "erreur" est survenue: les attributs qui étaient dans MySQL de type DATETIME NOT NULL et ayant pour valeur "0000-00-00 00:00:00" sont passés dans PostgreSQL TIMESTAMP WITHOUT TIME ZONE et sont automatiquement devenus dans tous mes champs "1970-01-01 00:00:00".

Comment pourrai-je y remédier sans toutefois recommencer la migration? J'ai déjà cherché dans pg_attribute, mais je vois le type des mes attributs.

(La leçon est retenue...la prochaine, je ferai un sed pour remplacer et mettre les valeurs adéquates).

Merci bien de me venir en aide.


share you knowledge

Hors ligne

#2 13/08/2013 15:21:14

arthurr
Membre

Re : Valeur par defaut

Bonjour,

le DATETIME de Mysql est équivalent au TIMESTAMP de PostgreSQL.
Le vrais problème est que la colonne était NOT NULL et que Mysql remplace une valeur NULL par '0000-00-00 00:00:00'
Le plus simple => passer la colonne en NULLABLE et updater toutes les valeurs '1970-01-01 00:00:00' à NULL

Si la colonne ne doit vraiment pas être NULL, je ne vois pas quelle valeur vous allez mettre dans le cas '0000-00-00 00:00:00' / '1970-01-01 00:00:00'

Hors ligne

#3 13/08/2013 15:37:28

atchopba
Membre

Re : Valeur par defaut

J'ai déjà pensé à ta solution, mais il y a plus de 429 tables. Parcourir toutes ces tables !!!!!!! Sachant que je ne sais pas qu'elles sont toutes les tables qui sont à modifiées...
Je vais mourir quoi...

Hors ligne

#4 13/08/2013 15:56:37

arthurr
Membre

Re : Valeur par defaut

tu peux déjà lancer cette requête qui va te sortir une liste de select à effectuer pour savoir si tu as des données à 1970-01-01 pour tes colonne de type TIMESTAMP WITHOUT TIME ZONE :

select 'select count(*) from ' || table_schema || '.' || table_name || ' where ' || column_name || '=''1970-01-01 00:00:00'';' from INFORMATION_SCHEMA.COLUMNS where data_type='timestamp without time zone';

Dernière modification par arthurr (13/08/2013 15:57:41)

Hors ligne

#5 13/08/2013 16:10:18

atchopba
Membre

Re : Valeur par defaut

Tu as de très bonnes idées. Par contre, il y a des tables où il me renvoie 0 qui signifie qu'il n'y a aucun enregistrement qui correspond. Ce que je pense faire maintenant, c'est de créer plutôt un procédure ou fonction qui me permet de mettre les valeurs adéquates. Qu'en penses-tu?

Hors ligne

#6 13/08/2013 16:20:32

arthurr
Membre

Re : Valeur par defaut

si tu as 0 c'est que tous les champs dates correspondent à autre chose que '1970-01...' (une date ou un valeur NULL si elle est acceptée)
et tu sais par quelle valeur tu vas remplacer '1970-01...' pour chaque colonne de chaque table ?

Hors ligne

#7 13/08/2013 16:25:05

atchopba
Membre

Re : Valeur par defaut

ok ! Merci bien pour toute ton aide.

share your knowledge

Hors ligne

Pied de page des forums