2015-01-19 3 views
2

Я пытаюсь изменить столбец course_id в таблице «курс», но я получаю эту ошибку:PostgreSQL ОШИБКА: ошибка синтаксиса или вблизи «VARCHAR»

CREATE TABLE course 
(
course_id varchar(10) PRIMARY KEY, 
title varchar(30), 
dep_name varchar(10), 
credits numeric(2,2) CHECK (credits>0) 
); 

ALTER TABLE takes ALTER COLUMN course_id varchar(10) REFERENCES course(course_id); 

ERROR: syntax error at or near "varchar" LINE 1: ALTER TABLE takes ALTER COLUMN course_id varchar(10) REFEREN...

+0

где берет структуру таблицы и как вы пишете запрос в трех разных СУБД, отмечаете ли вы кого-нибудь? – HaveNoDisplayName

ответ

2

изменяющего типа столбца и добавление внешнего ключа на это два разных утверждения:

ALTER TABLE takes ALTER COLUMN course_id TYPE VARCHAR(10); 

ALTER TABLE takes 
ADD CONSTRAINT takes_course_fk FOREIGN KEY (course_id) 
REFERENCES course(course_id); 
+0

Я не думаю, что он вообще хочет изменить тип столбца. 'course_id' уже определен как' varchar (10) 'в инструкции' create table'. –

+0

@a_horse_with_no_name обратите внимание на то, что для таблицы 'take' нет DDL, хотя вы вполне можете быть правы - я оставил его там для полноты, поскольку первоначальное требование было неясным (по крайней мере, для меня). – Mureinik

1

Ваш синтаксис worng , Оно должно быть:

ALTER TABLE takes ALTER COLUMN course_id TYPE varchar(10) ; 
+0

Я получаю ту же ошибку. –

1

Ссылки должны быть сделаны, как показано ниже: В вашем случае:

Alter table takes ADD CONSTRAINT FK_takes_course_id FOREIGN KEY (course_id) REFERENCES course(course_id) 
+1

@Piyush: Пример, который я дал для более легкого понимания ,,, не означает, что вам нужно использовать теги, которые были отправлены пользователем. – knkarthick24

+0

@ knkarthick24 Спасибо! Должно ли быть courseidfk или course_idfk? –

+0

Следуйте некоторым стандартам, например FK_tablename_columnname. В вашем случае: ** FK_takes_course_id ** – knkarthick24

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