2015-12-17 7 views
1

Я хочу изменить первичный ключ integer всех строк в таблице. Моя цель - вычесть определенный номер из pk и затем сбросить его.Как изменить значение первичного ключа?

Возможно ли это? Псевдокод: update mytable set id = id-100;

+1

Попробуйте и посмотрите. Сделайте это в транзакции, если вам нужно откат. –

+2

нет нет нет. никогда не делайте этого. никогда не возиться с значением PK, как это. postgres не остановит вас, но это очень плохая идея. –

ответ

3

Это возможно, но это никогда не является хорошей идеей. Первичный ключ существует только для одной цели, чтобы однозначно идентифицировать строку; как только вы попытаетесь заставить его служить другим целям, например, быть видимым пользователем порядковым номером, тогда у вас будут проблемы. В системах, в которых используются составные ключи, содержащие бизнес-информацию, всегда существует неприятный код для изменения ключевой информации, когда оказывается, что бизнес-информация нуждается в изменении, значительная часть аргумента для использования искусственных ключей заключается в устранении необходимости в таком виде подверженные ошибкам данные. Используйте отдельный столбец для видимых пользователем порядковых номеров и не смешивайте эту проблему с уникальной идентификацией строки.

0

OK Я нашел ошибку: число должно быть заключено в одинарные кавычки:

update mytable set id = id - '100' ;

+3

Для целочисленного столбца, который не имеет для меня никакого смысла (поскольку '' 'используется для строкового кавычки). Это заставляет меня беспокоиться даже больше, чем кажется @nathanhughes. – kratenko

+0

Нет, это совершенно неправильно. '' 100'' не является числом, это строковая константа. Не смешивайте числа и строки. Если это работает, но 'id-100' не значит, что есть что-то серьезно неправильное. ** Измените ** свой вопрос и добавьте (полный) оператор 'create table' соответствующей таблицы (включая определение первичного ключа) –

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