2015-10-05 3 views
1

Я довольно новичок в PostgreSQL и знаю только основные операции с базой данных. У меня есть база данных под названием neuro_db с именем пользователя neuro_user. Теперь я обнаружил, что не могу удалить столбец таблицы из neuro_db.Невозможно удалить столбец в PostgreSQL

После того, как я попробовал psql neuro_db в ubuntu 14.04, я попал в командную строку, начатую с neuro_db=#. Команда \d покажет таблицу, как это:

      List of relations 
Schema |    Name    | Type | Owner 
--------+-----------------------------------+----------+------------ 
public | auth_group      | table | neuro_user 
public | auth_group_id_seq     | sequence | neuro_user 
public | auth_group_permissions   | table | neuro_user 
public | auth_group_permissions_id_seq  | sequence | neuro_user 
public | auth_permission     | table | neuro_user 
public | auth_permission_id_seq   | sequence | neuro_user 
public | auth_user       | table | neuro_user 
public | auth_user_groups     | table | neuro_user 
public | auth_user_groups_id_seq   | sequence | neuro_user 
public | auth_user_id_seq     | sequence | neuro_user 
public | auth_user_user_permissions  | table | neuro_user 
public | auth_user_user_permissions_id_seq | sequence | neuro_user 
public | django_admin_log     | table | neuro_user 
public | django_admin_log_id_seq   | sequence | neuro_user 
public | django_content_type    | table | neuro_user 
public | django_content_type_id_seq  | sequence | neuro_user 
public | django_migrations     | table | neuro_user 
public | django_migrations_id_seq   | sequence | neuro_user 
public | django_session     | table | neuro_user 
public | neuro_category     | table | neuro_user 
public | neuro_category_id_seq    | sequence | neuro_user 
public | neuro_page      | table | neuro_user 
public | neuro_page_id_seq     | sequence | neuro_user 
(23 rows) 

Я хотел изменить таблицу «neuro_page» и после ввода \d neuro_page , он будет показывать эту таблицу:

        Table "public.neuro_page" 
    Column |   Type   |      Modifiers 
-------------+------------------------+--------------------------------------------------------- 
id   | integer    | not null default  nextval('neuro_page_id_seq'::regclass) 
category_id | integer    | not null 
title  | character varying(128) | not null 
text  | text     | not null 
url   | character varying(200) | not null 
photo  | character varying(100) | not null 
order  | character varying(128) | not null 
date  | date     | not null 
views  | integer    | not null 
likes  | integer    | not null 

Я хотел удалить " order "в этой таблице, поэтому я попытался набрать ALTER TABLE neuro_page DROP COLUMN order сразу после строки neuro_db=#, но ничего не произошло. Также не было ничего, попробовав ALTER TABLE neuro_page и DROP COLUMN order соответственно. Столбец «порядок» все еще существует! И никакой информации об ошибке!

Я также искал в Google ответ, но ничего не нашел. Я думаю, что я следил за нормальными операциями в базе данных, но не могу удалить ни одного столбца в таблице. Для столбца «порядок» нет внешнего ключа.

Я был бы очень благодарен, если кто-нибудь может мне помочь в этом вопросе. Благодаря!

+2

Если вы используете Django 1.7+, вы должны использовать миграции, так что вы не должны удалить столбцы вручную. Если вы вручную удалите столбец, вы рискуете, что ваши модели и миграции не синхронизируются с вашей базой данных. – Alasdair

ответ

1

Вам нужно избежать порядка имен столбцов в обратных тактах, потому что заказ является ключевым словом (например, order by 'column_name'). Убедитесь, что вы используете точку с запятой, чтобы показать конец команды:

ALTER TABLE neuro_page DROP COLUMN `order`; 
+0

Спасибо Alasdair! Я пропустил точку с запятой ... Как вы сказали, сначала я попробовал только миграции, но когда я добавил другой элемент, он поднял IntegrityError о «нулевом значении в столбце« порядок », нарушающем не-нулевое ограничение». Это заставляет меня хотеть отбросить весь столбец «порядок» в базе данных. – Burun

+0

И 'ALTER TABLE neuro_page DROP COLUMN order;' команда вызывает синтаксическую ошибку в порядке или рядом с "order" 'error ... – Burun

+0

Вам нужно избегать« порядка »в обратных тактах. Вы должны действительно заставить миграцию работать, а не удалять столбцы вручную. Я не могу предложить никаких конкретных советов, потому что я не знаю, что вы сделали. После удаления поля из вашей модели создайте миграцию с помощью 'makemigrations', затем выполните миграцию с помощью' migrate'. – Alasdair

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