Intereting Posts
Вставка SQL с выбранными и жестко заданными значениями Как найти последние операции обновления sql, действующие на определенную таблицу (SQL Server 2005) Поверните SQL-запрос в ActiveRecord Relation Как объединить SQL-запросы с разными выражениями? Чрезвычайно медленный запрос PostgreSQL с предложениями ORDER и LIMIT Вставьте отсутствующие записи из одной таблицы в другую с помощью mysql Создание и обновление нового столбца в улье вставлять текст в таблицу, зависящий от значений, возвращаемых из хранимых процедур (и оператора select) SQL n-to-n сопоставляет несколько значений Нельзя использовать специальный принцип «sa». mysql обновляет столбец с int по заказу Не удалось выполнить задание. Задание было вызвано пользователем <user>. Последний шаг для запуска был step1 Выполнение инструкции INSERT … SELECT атома Очередь работы как таблица SQL с несколькими потребителями (PostgreSQL) PySpark sqlContext JSON запрашивает все значения массива

Есть ли способ установить свойство AUTO_INCREMENT в существующем столбце таблицы в Vertica?

Предположим, у меня есть простая таблица:

CREATE TABLE user( id INT NOT NULL PRIMARY KEY, name VARCHAR(32) NOT NULL, ) 

Есть ли способ изменить эту таблицу, так что id станет полем AUTO_INCREMENT?

Я попробовал следующее:

  • ALTER TABLE (нет такого синтаксиса)
  • Создание другой таблицы с идентификатором автоматического увеличения и копирование данных из оригинала (не работает из-за ошибки: невозможно вставить или обновить столбец IDENTITY / AUTO_INCREMENT «id»)

Благодаря!

Я бы попытался просто ранжировать строки и использовать последовательность для будущих вставок.

 \set AUTOCOMMIT 'on' CREATE TABLE t1 ( val char(1) ); INSERT INTO t1 VALUES ('a'); INSERT INTO t1 VALUES ('b'); INSERT INTO t1 VALUES ('c'); INSERT INTO t1 VALUES ('d'); CREATE TABLE t2 ( id int, val char(1) ); INSERT INTO t2 (val, id) SELECT val, RANK() OVER (ORDER BY val) as id FROM t1; SELECT * FROM t2; 

Мы получаем:

  id |  вал
 ---- + -----
   1 | 
   3 |  с
   2 |  б
   4 |  d 

Успех!

Давайте подготовим таблицу для будущих вставок:

 -- get the value to start sequence at SELECT MAX(id) FROM t2; -- create the sequence CREATE SEQUENCE seq1 START 5; -- syntax as of 6.1 -- modify the column to add next value for future rows ALTER TABLE t2 ALTER COLUMN id SET DEFAULT NEXTVAL('seq1'); 

Быстрый тест:

 INSERT INTO t2 (val) VALUES ('e'); INSERT INTO t2 (val) VALUES ('f'); SELECT * FROM t2; 

Мы получаем:

  id |  вал
 ---- + -----
   4 |  d
   2 |  б
   3 |  с
   6 |  е
   1 | 
   5 |  е 

Надеюсь это поможет.