Поскольку вы используете case
, вы определяете частичную функцию, а частичные функции требуют фигурных скобок.
[…], поэтому я использую составной ключ, чтобы убедиться, что комбинация name и group_id не может использоваться 2 раза.
blockquote>Вы описываете необходимость ограничения; это не должно быть ключом вообще. При определении таблицы вы можете указать ограничение, что несколько полей должны быть уникальными вместе:
CREATE TABLE tag ( name varchar(50), group_id int, UNIQUE (name, group_id) );
Таким образом, вы получите СУБД, обеспечивающую для этих столбцов уникальную пару значений в каждой записи, не подразумевая, что являются ключом для поиска.
Итак, вы можете назначить любой первичный ключ, который вам нравится. Поскольку вы хотите, чтобы поле
id
было первичным ключом, сделайте это:CREATE TABLE tag ( name varchar(50), group_id int, id serial NOT NULL, UNIQUE (name, group_id), PRIMARY KEY (id) );