Zur besseren Nachverfolgung aktivieren wir das erweiterte Debugging:
SET client_min_messages TO DEBUG2;
IMPORT FOREIGN SCHEMA daten FROM SERVER tcp_azur_Test INTO test OPTIONS (DATABASE 'test');
IMPORT FOREIGN SCHEMA informix LIMIT TO (abfrage) FROM SERVER tcp_azur_Test INTO test OPTIONS (DATABASE 'test');
Hinweis:
DEBUG: PREPARE query "SELECT tabid, trim(owner), tabname FROM systables WHERE tabid >= 100 AND owner = 'daten' AND tabname IN ('abfrage') ORDER BY tabname DESC"
Von Informix nach PostgreSQL. Nicht umgekehrt! Ein Export oder Zugriff von Informix auf PostgreSQL über dieselbe Methode ist nicht möglich. Das Schema muss also zwingend auf Informix vorhanden sein!
Die folgende PL/pgSQL-Prozedur kopiert Tabellen aus dem per Foreign Schema importierten Schema (`quelle`) in ein lokales Zielschema (`ziel`).
Dabei wird:
CREATE OR REPLACE PROCEDURE db.kopie( IN quelle TEXT, IN ziel TEXT) LANGUAGE 'plpgsql' AS $$ DECLARE tabelle TEXT; BEGIN -- Schema prüfen und ggf. erstellen PERFORM 1 FROM information_schema.schemata WHERE schema_name = ziel; IF NOT FOUND THEN EXECUTE format('CREATE SCHEMA %I', ziel); END IF; -- Tabellenstruktur kopieren FOR tabelle IN SELECT TABLE_NAME FROM information_schema.tables WHERE table_schema = quelle LOOP EXECUTE format('DROP TABLE IF EXISTS %I.%I', ziel, tabelle); RAISE NOTICE 'Struktur % verarbeitet', tabelle; EXECUTE format( 'CREATE TABLE %I.%I (LIKE %I.%I INCLUDING ALL)', ziel, tabelle, quelle, tabelle ); END LOOP; -- Daten kopieren mit Fehlerbehandlung FOR tabelle IN SELECT TABLE_NAME FROM information_schema.tables WHERE table_schema = quelle LOOP BEGIN EXECUTE format('INSERT INTO %I.%I SELECT * FROM %I.%I', ziel, tabelle, quelle, tabelle); RAISE NOTICE 'Tabelle % verarbeitet', tabelle; EXCEPTION WHEN OTHERS THEN RAISE NOTICE '------------ FEHLER bei % --------------', tabelle; COMMIT; END; END LOOP; END; $$; ALTER PROCEDURE db.kopie(text, text) OWNER TO postgres;