Vous n'êtes pas identifié(e).
Pages : 1
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
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
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
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
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
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
ok ! Merci bien pour toute ton aide.
share your knowledge
Hors ligne
Pages : 1