Как удалить одну таблицу Postgres в приложении Ruby on Rails Heroku?
подобный вопрос здесь, но ни один из ответов на самом деле ответить на этот вопрос. Принятый ответ просто показывает, как войти в консоль и уничтожить все записи. Это не то, что мне нужно в данном случае.
мне нужно полностью удалить одну таблицу (у нее нет ассоциаций) и воссоздать ее с существующей миграцией.
есть что-то вроде?
heroku pg:destroy_table "Products"
затем я снова запустил бы миграцию, и она создала бы таблицу с новая схема:
heroku run rake db:migrate
2 ответов
Вы можете попробовать использовать heroku pg:psql
. Это должно открыть консоль для вашей базы данных, где вы можете выполнить произвольный SQL:
DROP TABLE products;
вы можете найти больше о pg: psql в Heroku docs:https://devcenter.heroku.com/articles/heroku-postgresql#pgpsql
документы PostgreSQL для того же: http://www.postgresql.org/docs/9.1/static/sql-droptable.html
как это сделать правильно
для тех, кто прибывает сюда, как я: сильно рассмотреть не работает DROP TABLE products
как указано в принятой ответ. Рекомендуется использовать этот:
heroku run rake db:migrate:down VERSION=20160518643350
версия-это метка времени в вашем файле миграции, т. е. префикс:
db/migrate/20160518643350_create_products.rb
затем измените схему (или создайте новую миграцию) и запустите ее:
heroku run rake db:migrate:up VERSION=20160518643350
когда вы создаете новую базу данных PG в Rails, a schema_migrations
таблица также создается для отслеживания миграций вы миграций. Если вы уроните таблицу из консоли Postgres Heroku (heroku pg:psql
) ваш файл миграции не будет знать об этом, и когда вы попытаетесь снова запустить миграцию с новыми рельсами схемы, он не создаст таблицу, так как думает, что она уже есть.
если heroku run rake db:migrate:up ...
не работает
если вы уже запустили heroku pg:psql
и уронил свой столик (DROP TABLE products;
) у вас могут возникнуть проблемы с созданием таблицы из миграции поскольку, как объяснено выше, Rails думает, что таблица есть. Если это так, выполните следующие шаги:
1. Откройте консоль psql на Heroku, создайте произвольный products
стол
heroku pg:psql
CREATE TABLE products(foo int);
выход psql
терминал.
2. Запустите миграцию вниз, чтобы schema_migrations записал удаленную таблицу
heroku run rake db:migrate:down VERSION=20160518643350
это отбросит вашу новую таблицу и запишет миграцию.
3. Запустите миграцию, чтобы создать новую таблица
heroku run rake db:migrate:up VERSION=20160518643350
это должно сделать это!