web-dev-qa-db-ja.com

Rails + Postgresの移行-「PG :: UndefinedFunction:ERROR:function gen_random_uuid()notexist」というエラーが表示されるのはなぜですか?

私のRails移行の1つは、主キーとしてuuidを使用します。Postgres拡張機能gen_random_uuid()はこの問題を解決するはずですが、関連する拡張機能をインストールした後もエラーが発生し続けます( uuid-ossp)。

11
user3006381

問題は、uuid-osspリセットと移行の一環としてデータベースを削除するたびに、拡張機能がデータベースで吹き飛ばされていました(例:rake db:drop db:create db:migrate)。

修正は、関​​連する拡張機能を有効にする他のすべての移行の前に実行される移行を作成することです。そのようです (db/migrate/0_enable_extensions.rb):

class EnableExtensions < ActiveRecord::Migration[5.1]
  def change
    enable_extension 'uuid-ossp'
    enable_extension 'pgcrypto'
  end
end
28
user3006381

エッジケースの答え:

上記のように拡張機能を有効にする移行を追加します。

以前にbigint IDを持っていて、UUIDに変換している場合、rake db:reset db:migrateの実行は失敗しました。上記のように、必ずrake db:drop db:create db:migrateを実行してください。

エラーEnvironment data not found in the schemaが発生した場合は、bin/Rails db:environment:set Rails_ENV=developmentを実行してください。

0
Stone