De applicatie leeft in de ontwikkelomgeving heeft nu 50 tabellen met honderden kolommen. Geen views, triggers etc.
De gekozen strategie is om een (SQL) script te schrijven dat de inhoud kan migreren van MySQL naar PostgreSQL,
zodat het via de T- en A-omgeving naar productie kan.
Het eerste script maakt de tabellen aan in PostgreSQL, zonder constraints, zodat de data in alfabetische volgorde ingelezen kan worden, op de manier van mysqldump.
Hiervoor heb ik een paar zinnige hints gekregen in dit topic: http://www.phphulp.nl/php/forum/topic/postgres-vs-mysql/89237
Nu ben ik bij het data-deel beland. De eerste stap is om de data zo compleet mogelijk aan te leveren via:
mysqldump -u root -p --skip-quote-names --hex-blob --skip-triggers --compact
--no-create-info --complete-insert --quote-names --compatible=ansi databasenaam >
dump.sqlOm vervolgens de hexadecimale kolommen aan te passen:
sed "s/0x\([0-9A-F]*\)/decode('\1','hex')/g" dump.sql > dump_pg.sqlVervolgens wil ik de data inladen. Ik test dit met pgAdmin3, en heb vooraf de volgende compatibiliteitsinstellingen moeten maken:
SET search_path = "$user",databasenaam; -- mysqldump voegt geen schemanaam toe
SET standard_conforming_strings = OFF; -- mysqldump biedt alleen escaped strings aan
SET backslash_quote = ON;
SET escape_string_warning = OFF; -- minder loggingMaar bij de eerste test merk ik dat lege strings door mysqldump worden geƫxporteerd met twee enkele aanhalingstekens, die door PostgreSQL worden herkend als "''", een string van 2 karakters (twee keer een enkel aanhalingsteken ipv een lege string).
Dit gebeurt in ieder geval voor kolommen van het type varchar.
De brondatabase bevat voor honderden MB's aan handmatig getypte rapporten, een quick-fix als een find-replace op de dump om '' naar NULL om te zetten is geen optie helaas.
Weet iemand hiervoor een oplossing?
[size=xsmall]Toevoeging op 23/10/2015 16:50:28:[/size]
Oke, ik ben er al.
Het blijkt een niet-intuitieve quirk van pgAdmin die al 10 jaar bestaat. Dat soort domme dingen kunnen gemakkelijk op het verkeerde been zetten en meer dan een uur zoektijd kosten.
http://forums.devshed.com/postgresql-help-21/insert-empty-string-null-field-291424.html