2014-09-19 2 views
0

Я в процессе миграции приложения Ruby on Rails из MySQL в Postgres. Есть ли рекомендуемый способ сохранить удаленные данные , как и все удаленные записи (по крайней мере, их идентификаторы) из MySQL?Перемещение данных MySQL в Postgres

В процессе тестирования дамп-восстановление не хранило удаленные записи.

Кроме того, если мне удастся сохранить записи там, где они есть, что будет с пустыми в Postgres? Будут ли они пропущены или использованы?

Пример

Скажем, у меня есть user с идентификатором 101 и я удалил users до 100. Мне нужно 101, чтобы остановиться на 101.

+1

Если данные удалены, их больше нет в БД, поэтому вы не можете их сохранить. Это не имеет смысла. Вы говорите об 'AUTO_INCREMENT' и столбцах PostgreSQL' SERIAL'? –

+0

Я обновлю вопрос на примере. –

ответ

2

Поэтому вы не хотите переназначать идентификаторы, назначенные для записей, в которых были сгенерированы ключи.

Это должно быть значение по умолчанию при любой разумной миграции. Когда вы копируете строки данных, скажем, экспортируя из MySQL с SELECT ... INTO OUTFILE и импортируя в PostgreSQL с COPY tablename FROM 'filename.csv' WITH (FORMAT CSV), идентификаторы не изменятся.

Все, что вам нужно сделать, это установить следующий идентификатор, который будет сгенерирован в последовательности в таблице PostgreSQL. Итак, у вас есть таблица:

CREATE TABLE users 
(
    id serial primary key, 
    name text not null, 
    ... 
); 

и вы только что скопировали пользователя с id = 101 в него.

Вы теперь просто присвоить новое значение последовательности генерирования ключа для таблицы, например:

SELECT setval('users_id_seq', (SELECT max(id) FROM users)+1); 

Чтобы узнать больше о последовательности и генерации ключей в PostgreSQL см SERIAL in the numeric types documentation, документацию для CREATE SEQUENCE, документы для setval и т. Д. Имя по умолчанию для последовательности генерации ключей: tablename_columnname_seq.

+0

О, хорошо! Я начал паниковать, когда думал, что это может быть проблемой. Должен ли я назначать новые значения последовательности генерации ключей для каждой таблицы отдельно? –

+0

@emm Да. Я бы написал его лично. Вышеприведенное предполагает, что вы переносите таблицу данных за таблицей в CSV. Если вы используете какую-то миграцию данных на уровне Rails, все может быть иначе. –

+0

Удивительная помощь. Спасибо. –

Смежные вопросы