Я хотел бы объединить две таблицы с теми же столбцами в postgresql. Фактически, у меня уже есть одна используемая таблица, и я хотел бы добавить содержимое дампа с другого сервера для объединения таблиц. Обе таблицы имеют одинаковые столбцы, включая первичный ключ ... Поэтому, когда я пытаюсь загрузить дамп, я получаю дубликаты первичных ключей. Я попытался загрузить дамп в отдельную таблицу и вставить содержимое этой новой таблицы в первую с INSERT/SELECT, но поле первичного ключа генерирует ошибки из-за дубликатов, и я не могу опустить его в вставить (или получить нарушение «не-нулевого ограничения»).Postgresql: добавьте содержимое таблицы в другую таблицу
Каким будет синтаксис (или решение) для добавления содержимого второй таблицы (или ее дампа) в конце первого с правильными первичными ключами?
Короче говоря, с примером, я хотел бы:
#
# 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);
входы являются отвалы t_table1 и t_table2, и хотел бы получить t_merge.
Какие «правильные» первичные ключи? Как обычно генерируются ключи для первой таблицы? –
У вас есть автономическое поле для первичного ключа? Если у вас есть таблица A с 'pkField_id = 1' и таблица B также с' pkField_id = 1', какой результат вы ожидаете? –
Возможно, вы задаете неправильный вопрос [** Что такое проблема XY? **) (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) , потому что если обе таблицы имеют одинаковый идентификатор, вы нарушите ПК. Поэтому вам нужно создать другое поле, чтобы быть PK. Или решить, что является жизнеспособным обходным путем. –