Я хочу изменить первичный ключ integer
всех строк в таблице. Моя цель - вычесть определенный номер из pk
и затем сбросить его.Как изменить значение первичного ключа?
Возможно ли это? Псевдокод: update mytable set id = id-100;
Я хочу изменить первичный ключ integer
всех строк в таблице. Моя цель - вычесть определенный номер из pk
и затем сбросить его.Как изменить значение первичного ключа?
Возможно ли это? Псевдокод: update mytable set id = id-100;
Это возможно, но это никогда не является хорошей идеей. Первичный ключ существует только для одной цели, чтобы однозначно идентифицировать строку; как только вы попытаетесь заставить его служить другим целям, например, быть видимым пользователем порядковым номером, тогда у вас будут проблемы. В системах, в которых используются составные ключи, содержащие бизнес-информацию, всегда существует неприятный код для изменения ключевой информации, когда оказывается, что бизнес-информация нуждается в изменении, значительная часть аргумента для использования искусственных ключей заключается в устранении необходимости в таком виде подверженные ошибкам данные. Используйте отдельный столбец для видимых пользователем порядковых номеров и не смешивайте эту проблему с уникальной идентификацией строки.
OK Я нашел ошибку: число должно быть заключено в одинарные кавычки:
update mytable set id = id - '100' ;
Для целочисленного столбца, который не имеет для меня никакого смысла (поскольку '' 'используется для строкового кавычки). Это заставляет меня беспокоиться даже больше, чем кажется @nathanhughes. – kratenko
Нет, это совершенно неправильно. '' 100'' не является числом, это строковая константа. Не смешивайте числа и строки. Если это работает, но 'id-100' не значит, что есть что-то серьезно неправильное. ** Измените ** свой вопрос и добавьте (полный) оператор 'create table' соответствующей таблицы (включая определение первичного ключа) –
Попробуйте и посмотрите. Сделайте это в транзакции, если вам нужно откат. –
нет нет нет. никогда не делайте этого. никогда не возиться с значением PK, как это. postgres не остановит вас, но это очень плохая идея. –