ukulele
Datenbank-Guru
- Beiträge
- 5.284
Ich bastel hier an einem größeren Projekt bei dem ich viele kleine Dateien (HTML) aus einem Pfad auf der Festplatte in eine MSSQL DB importiere, dort zu validem XML forme und den Inhalt in relationale Daten zerlege (zumindest zerlegen möchte, fertig ist das alles noch nicht). Am Ende soll ein Teil der Daten mit einem bestehenden Bestand verküpft werden, der aus einer auf MSSQL basierenden Anwendung stammt. Das Zielsystem ist also MSSQL damit die Anwendung darauf zugreifen kann.
Jetzt habe ich schon einige wichtige Schritte umgesetzt und es läuft recht gut. Ich stoße aber mit dem SQL Express an Grenzen, vor allem weil die Daten die 10 GB Größe knacken. Ich arbeite schon über 5 MSSQL DBs wegen dieses Limits, das ist nicht so angenehm und nicht effizient. Meine Idee daher: Die Dinge die ich schon gut gelöst habe und die Dinge die mit PG schwer zu lösen sind mache ich in MSSQL. Die Daten schiebe ich über eine ODBC Verbindung auf eine Postgres DB. Den ein oder anderen Schritt kann ich in PG umsetzen. Am Ende hole ich mir die Daten, die ich in MSSQL mit dem Bestand verbinde wieder zurück, soweit die Theorie.
Nun sind meine Postgres Erfahrungen begrenzt aber ich habe mir schon ein paar Sachen angesehen. Allerdings hängt viel von dem ODBC Treiber ab und der macht schon ziemliche Zicken.
Problem: Spalten mit XML-Datentyp kann ich über ODBC nicht abfragen (und vermutlich auch nicht befüllen).
Das Equivalent zu VARCHAR(MAX) scheint TEXT zu sein. Spricht etwas gegen oder für VARCHAR(10485760)?
Tipps oder Ideen was man bei einer solchen Konstelation (MSSQL schreibt und liest aus PG) beachten oder verbessern sollte?
Jetzt habe ich schon einige wichtige Schritte umgesetzt und es läuft recht gut. Ich stoße aber mit dem SQL Express an Grenzen, vor allem weil die Daten die 10 GB Größe knacken. Ich arbeite schon über 5 MSSQL DBs wegen dieses Limits, das ist nicht so angenehm und nicht effizient. Meine Idee daher: Die Dinge die ich schon gut gelöst habe und die Dinge die mit PG schwer zu lösen sind mache ich in MSSQL. Die Daten schiebe ich über eine ODBC Verbindung auf eine Postgres DB. Den ein oder anderen Schritt kann ich in PG umsetzen. Am Ende hole ich mir die Daten, die ich in MSSQL mit dem Bestand verbinde wieder zurück, soweit die Theorie.
Nun sind meine Postgres Erfahrungen begrenzt aber ich habe mir schon ein paar Sachen angesehen. Allerdings hängt viel von dem ODBC Treiber ab und der macht schon ziemliche Zicken.
Code:
CREATE TABLE "public"."files"(
"pk" UUID NOT NULL,
"file" VARCHAR(1000) NULL,
"file_date" TIMESTAMP NOT NULL,
"file_type" CHAR(4) NOT NULL,
"url" VARCHAR(1000) NOT NULL,
"data" VARCHAR(10485760) NULL,
"data_xml" XML NULL
);
ALTER TABLE "public"."files" ADD CONSTRAINT files_pk PRIMARY KEY(pk);
ALTER TABLE "public"."files" ALTER COLUMN "data" SET STORAGE EXTENDED;
ALTER TABLE "public"."files" ALTER COLUMN "data_xml" SET STORAGE EXTENDED;
Ich suche schon eine Weile nach einer Idee das Problem zu lösen oder zu umgehen. Elegante Vorschläge?Der OLE DB-Anbieter 'MSDASQL' für den Verbindungsserver 'POSTGRESQL' hat inkonsistente Metadaten für eine Spalte bereitgestellt. Für die data_xml-Spalte (Kompilierzeit-Ordnungszahl 7) des "register"."public"."files"-Objekts wurde für 'DBCOLUMNFLAGS_ISLONG' der Wert 128 zur Kompilierzeit und 0 zur Laufzeit gemeldet.
Das Equivalent zu VARCHAR(MAX) scheint TEXT zu sein. Spricht etwas gegen oder für VARCHAR(10485760)?
Tipps oder Ideen was man bei einer solchen Konstelation (MSSQL schreibt und liest aus PG) beachten oder verbessern sollte?