ich habe hier 3 Datenbanken mit exakt der gleichen Tabellenstruktur. Was muss ich machen, damit ich die Tabellen möglichst einfach und schnell zusammenfügen kann?
Die einzelnen Datensätze unterscheiden sich durch das Datum und die Uhrzeit, sind also auch datenbankübergreifend eindeutig.
Einfach einfügen hört sich leicht an, ist es aber nicht.
Habe jetz probeweise eine Tabelle der ersten DB ins SQL-Format exportiert, um sie dann in der zweiten einzufügen.
Das funktioniert aber nicht so, wie ich mir das vorgestellt hab.
So schaut dir Grundsyntax aus wenn ich was einfügen möchte:
INSERT INTO inside_temp(
savetime, weatherdata, newflag)
VALUES (?, ?, ?);
Was muss ich in das Abfragefenster dann alles eingeben, wenn meine sql-Datei so ausschaut:
--
-- PostgreSQL database dump
--
-- Started on 2007-12-30 14:11:25
SET client_encoding = 'SQL_ASCII';
SET standard_conforming_strings = off;
SET check_function_bodies = false;
SET client_min_messages = warning;
SET escape_string_warning = off;
SET search_path = public, pg_catalog;
SET default_tablespace = '';
SET default_with_oids = false;
--
-- TOC entry 1298 (class 1259 OID 16434)
-- Dependencies: 4
-- Name: inside_temp; Type: TABLE; Schema: public; Owner: postgres; Tablespace:
--
CREATE TABLE inside_temp (
savetime timestamp(0) with time zone NOT NULL,
weatherdata real,
newflag boolean
);
ALTER TABLE public.inside_temp OWNER TO postgres;
--
-- TOC entry 1651 (class 0 OID 16434)
-- Dependencies: 1298
-- Data for Name: inside_temp; Type: TABLE DATA; Schema: public; Owner: postgres
--
COPY inside_temp (savetime, weatherdata, newflag) FROM stdin;
2007-05-05 06:44:00+02 20.799999 t
...
...
...
2006-01-13 03:42:00+01 17.700001 t
\.
--
-- TOC entry 1650 (class 2606 OID 16437)
-- Dependencies: 1298 1298
-- Name: inside_temp_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace:
--
ALTER TABLE ONLY inside_temp
ADD CONSTRAINT inside_temp_pkey PRIMARY KEY (savetime);
--
-- TOC entry 1648 (class 1259 OID 16438)
-- Dependencies: 1298
-- Name: index_savetime_inside_temp; Type: INDEX; Schema: public; Owner: postgres; Tablespace:
--
CREATE INDEX index_savetime_inside_temp ON inside_temp USING btree (savetime);
-- Completed on 2007-12-30 14:11:27
--
-- PostgreSQL database dump complete
--
Naja der COPY-Block schaut doch ganz gut aus oder meinst du nicht? Versuch doch einfach mal den ganzen Block zu verwenden ohne das in INSERTs umzuschreiben.
Es wird aus dem Dump heraus wieder eine eigene Indexdatei angelegt
Der Zähler des Indexes wird auf den Letzten Eintrag gesetzt.
Ich mache in solchen Fällen einen reinen Datendump, in dem zwar auch noch die Daten für die Indizes vorhanden sind. Diese lassen sich aber mit einem Editor leicht entfernen.
Mit “pg_dump -DT tabellenname datenbank” bekommst Du nur die Daten im “klassischen” SQL-Stil der angegebenen Tabelle.
In einem Editor Deiner Wahl entfernst Du nun
Alle Zeilen, die nicht mit “Insert into” beginnen.
Evtl in den Tabellen die Spalte “id”, sowohl im ersten Teil des Insert-Befehls, als auch im “value”-Teil. Dies geht oft mit einem Search/Replace-Befehl.
Jetzt kannst Du die Dateien zusammenfassen oder einzeln in die neue Datenbank einspielen - es muss allerdings eine Datenbank mit einer entsprechenden Tabelle vorliegen.