2013-07-14 5 views
0

В PostgreSQL 8.4.13 почему я пожалуйста получаю ошибку синтаксисаСинтаксическая ошибка или вблизи «на»

ERROR: syntax error at or near "on" 
LINE: ... references balkan_users(id) check (id <> author) on delete ... 

для следующих 2-х заявлений?

create table balkan_users (
     id varchar(32) primary key, 
     first_name varchar(64) not null, 
     last_name varchar(64), 
     female boolean, 
     avatar varchar(128), 
     city varchar(64), 
     mobile varchar(64), 
     login timestamp default current_timestamp, 
     logout timestamp, 
     last_ip inet, 
     vip timestamp, 
     mail varchar(256), 
     green integer, 
     red integer, 
     medals integer not null default 0 
); 

create table balkan_rep (
     rep_id serial, 
     id varchar(32) references balkan_users(id) check (id <> author) on delete cascade, 
     author varchar(32) references balkan_users(id) on delete cascade, 
     author_ip inet, 
     nice boolean, 
     about varchar(256), 
     stamp timestamp default current_timestamp, 
     primary key(id, author); 
); 

Я также подготовил an SQLFiddle для демонстрации моей проблемы.

+1

Вы пытались переместить проверочное ограничение за «при удалении каскада»? –

+0

Затем я получаю: Ошибка создания схемы: ОШИБКА: синтаксическая ошибка в конце ввода: –

+2

Это потому, что у вас есть дополнительная точка с запятой после первичного ключа. Вы применяете оба эти шага, и они будут работать. Я просто испытал. –

ответ

3

ОШИБКА: ошибка синтаксиса в или около "на":

Перемещение check после on delete cascade

id varchar(32) references balkan_users(id) on delete cascade check (id <> author), 

ERROR: ошибка синтаксиса в конце ввода:

удалите точку с запятой в последней колонке primary key(id, author);

SQL Fiddle

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