Как удалить одну таблицу 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

это должно сделать это!