Ich möchte zwei Tabellen mit den gleichen Spalten in Postgresql zusammenführen. Tatsächlich habe ich bereits eine Tabelle in Benutzung und möchte den Inhalt eines Speicherauszugs von einem anderen Server anfügen, um die Tabellen zusammenzuführen. Beide Tabellen haben dieselben Spalten, einschließlich des Primärschlüssels ... Wenn ich also versuche, den Dump zu laden, erhalte ich doppelte Primärschlüsselfehler. Ich habe versucht, den Speicherauszug in eine separate Tabelle zu laden und den Inhalt dieser neuen Tabelle in den ersten mit einem INSERT/SELECT einzufügen, aber das Primärschlüsselfeld erzeugt Fehler wegen der Duplikate, und ich kann es nicht weglassen einfügen (oder eine "not-null constraint" -Verletzung erhalten).Postgresql: fügen Sie den Inhalt einer Tabelle an eine andere Tabelle an
Was wäre die Syntax (oder Lösung), um den Inhalt der zweiten Tabelle (oder ihres Dumps) am Ende des ersten mit korrekten Primärschlüsseln anzufügen?
Kurz gesagt, mit einem Beispiel möchte ich mag:
#
# First table:
#
CREATE TABLE t_table1 (
f_fullcmd text,
f_id integer NOT NULL,
f_body text
);
INSERT INTO t_table1 VALUES ('command1', 1, 'This is my first command');
INSERT INTO t_table1 VALUES ('command2', 2, 'This is my second command');
INSERT INTO t_table1 VALUES ('command3', 3, 'This is my third command');
ALTER TABLE ONLY t_table1 ADD CONSTRAINT pk_1_t_table1 PRIMARY KEY (f_id);
#
# Second table to append to t_table1
#
CREATE TABLE t_table2 (
f_fullcmd text,
f_id integer NOT NULL,
f_body text
);
INSERT INTO t_table2 VALUES ('run-1', 1, 'This is my first run');
INSERT INTO t_table2 VALUES ('run-2', 2, 'This is my second run');
INSERT INTO t_table2 VALUES ('run-3', 3, 'This is my third run');
ALTER TABLE ONLY t_table2 ADD CONSTRAINT pk_1_t_table2 PRIMARY KEY (f_id);
#
# Resulting table:
#
CREATE TABLE t_merge (
f_fullcmd text,
f_id integer NOT NULL,
f_body text
);
INSERT INTO t_merge VALUES ('command1', 1, 'This is my first command');
INSERT INTO t_merge VALUES ('command2', 2, 'This is my second command');
INSERT INTO t_merge VALUES ('command3', 3, 'This is my third command');
INSERT INTO t_merge VALUES ('run-1', 4, 'This is my first run');
INSERT INTO t_merge VALUES ('run-2', 5, 'This is my second run');
INSERT INTO t_merge VALUES ('run-3', 6, 'This is my third run');
ALTER TABLE ONLY t_merge ADD CONSTRAINT pk_1_t_merge PRIMARY KEY (f_id);
Die Eingänge sind die Deponien von t_table1 und t_table2, und würden gerne t_merge bekommen.
Was der „richtige“ Primärschlüssel ist? Wie werden die Schlüssel für die erste Tabelle normalerweise generiert? –
Haben Sie ein automatisches Feld als Primärschlüssel? Wenn Sie Tabelle A mit 'pkField_id = 1 'und Tabelle B auch mit' pkField_id = 1' haben, welches Ergebnis erwarten Sie? –
Sie stellen wahrscheinlich die falsche Frage [** Was ist das XY-Problem? **] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) weil beide Tabellen Haben Sie dieselbe ID, verletzen Sie PK. Sie müssen also ein anderes Feld erstellen, um PK zu sein. Oder entscheiden Sie, was ein praktikabler Workaround ist. –