поле - postgresql составной первичный ключ




Как установить первичный ключ auto increment в PostgreSQL? (4)

Автоматическое увеличение первичного ключа в postgresql:

Шаг 1, создайте таблицу:

CREATE TABLE epictable
(
    mytable_key    serial primary key,
    moobars        VARCHAR(40) not null,
    foobars        DATE
);

Шаг 2, вставьте значения в таблицу как это, обратите внимание, что mytable_key не указан в первом списке параметров, это приводит к автоматической инициализации последовательности по умолчанию.

insert into epictable(moobars,foobars) values('delicious moobars','2012-05-01')
insert into epictable(moobars,foobars) values('worldwide interblag','2012-05-02')

Шаг 3, выберите * из таблицы:

[email protected]$ psql -U pgadmin -d kurz_prod -c "select * from epictable"

Шаг 4, интерпретировать вывод:

mytable_key  |        moobars        |  foobars   
-------------+-----------------------+------------
           1 | delicious moobars     | 2012-05-01
           2 | world wide interblags | 2012-05-02
(2 rows)

Обратите внимание, что столбец mytable_key был автоматически увеличен.

ProTip:

Вы всегда должны использовать первичный ключ в своей таблице, потому что postgresql внутренне использует структуры хеш-таблицы для увеличения скорости вставки, удаления, обновления и выбора. Если доступен столбец первичного ключа (который является принудительным уникальным и не равным нулю), его можно использовать для предоставления уникального семпла для хэш-функции. Если столбцы первичного ключа недоступны, хеш-функция становится неэффективной, поскольку она выбирает какой-либо другой набор столбцов в качестве ключа.

У меня есть таблица в PostgreSQL с 22 столбцами, и я хочу добавить первичный ключ автоматического увеличения.

Я попытался создать столбец с именем id типа BIGSERIAL, но pgadmin ответил с ошибкой:

ERROR: sequence must have same owner as table it is linked to.

Кто-нибудь знает, как решить эту проблему? Как добавить создание автоматически увеличивающего первичный ключ в PostgreSQL без повторного создания таблицы?


Если вы хотите использовать числа в последовательности, определите новую последовательность с чем-то вроде

CREATE SEQUENCE public.your_sequence
    INCREMENT 1
    START 1
    MINVALUE 1
;

а затем измените таблицу, чтобы использовать последовательность для id:

ALTER TABLE ONLY table ALTER COLUMN id SET DEFAULT nextval('your_sequence'::regclass);

Может быть, я немного опаздываю, чтобы ответить на этот вопрос, но я работаю над этим вопросом на своей работе :)

Я хотел написать столбец «a_code» = c1, c2, c3, c4 ...

Сначала я открыл столбец с именем ref_id и serial ref_id . Тогда я решил свою проблему с помощью этой команды:

update myschema.mytable set a_code=cast('c'||"ref_id" as text) 

Попробуйте эту команду:

ALTER TABLE your_table ADD COLUMN key_column BIGSERIAL PRIMARY KEY;

Попробуйте его с тем же БД-пользователем, как тот, который вы создали таблицу.





postgresql