Как сбросить последовательность идентификаторов таблицы Postgresql на Heroku - PullRequest
0 голосов
/ 04 ноября 2019

В моей базе данных есть таблица 'entreprises', которую я заполнил, загрузив данные вручную, используя приложение сторонних производителей. В результате последовательность идентификаторов полностью испорчена, и я получаю сообщение об ошибке id = null при попытке создания новых записей.

Поддержка Heroku рекомендовала мне использовать: heroku pg:psql -a app_name, и идти оттуда.

но я не уверен, что делать дальше. Я пытался: pg_set_serial_sequence('entreprises','id'), но также получаю сообщение об ошибке: Нет Функция Соответствует заданному имени и типу аргумента ....

Я не думаю, что это трудная задача, не знаю, почему поддержка Heroku не обеспечилаполное решение проблемы.

Ответы [ 3 ]

0 голосов
/ 04 ноября 2019
  1. Подключение к консоли heroku

    heroku run rails c -app app_name
    
  2. Выполнить следующий код

    ActiveRecord::Base.connection.reset_pk_sequence!('entreprises')
    
0 голосов
/ 06 ноября 2019

Ни одно из решений не помогло мне, особенно то, которое не могло заставить меня удалить всю таблицу. Я выбрал другой подход, который передает всю таблицу в UUID и сохраняет old_id в другую таблицу:

class ResetIdOfEntreprise < ActiveRecord::Migration[5.1]
  def change
    add_column :entreprises, :uuid, :uuid, default: "uuid_generate_v4()", null: false
    add_column :entreprises, :old_id, :integer
    Entreprise.update_all("old_id=id")

    change_table :entreprises do |t|
      t.remove :id
      t.rename :uuid, :id
    end
    execute "ALTER TABLE entreprises ADD PRIMARY KEY (id);"
  end
end
0 голосов
/ 04 ноября 2019

Просто войдите на сервер Postgres или подключите вашу базу данных с помощью pgadmin или любого другого инструмента с графическим интерфейсом Postgres и выполните следующую команду в окне запроса.

truncate table entreprises restart identity

Это удалит всезаписи из вашей таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...