2016-05-09 13 views
1

Ich arbeite mit einem Rails-Projekt, das UUIDs verwendet, über die uuid-ossp-Erweiterung.Was ist die einfachste Möglichkeit zum Aktivieren von UUIDs in einem Rails-Schema?

Dies wird durch dem getan, was wie eine Standard-Migration zu mir aussieht:

class EnableExtensions < ActiveRecord::Migration 
    def change 
    enable_extension 'plpgsql' 
    enable_extension 'uuid-ossp' if Rails.env.development? || Rails.env.test? 
    end 
end 

Doch mit dieser Arbeit erfordert, dass manuell mit einem Postgres Super-User für jede Datenbank aktiviert werden, um die Erweiterung um und setze ich gehen zu:

-- enable_extension("uuid-ossp") 
rake aborted! 
ActiveRecord::StatementInvalid: PG::InsufficientPrivilege: ERROR: permission denied to create extension "uuid-ossp" 
HINT: Must be superuser to create this extension. 
: CREATE EXTENSION IF NOT EXISTS "uuid-ossp" 

ich bin nicht meinem Benutzer gehen zu geben, oder die Schienen Projektnutzer, Superuser-Privilegien auf jedem meiner Datenbanken - das wie eine gute Gewohnheit scheint nicht. Wie soll ich das machen?

Hinweis: this question's accepted answer doesn't answer the larger question in the title.

+1

Basierend auf [dieser] (http://stackoverflow.com/a/20745157/143238) Antwort auf eine ähnliche Frage zu Heroku (von der Frage verknüpft, damit Sie erwähnt als kein Duplikat ist), https://github.com/dimitri/pgextwlist ermöglicht es Ihnen, Erweiterungen auf die weiße Liste zu setzen, ohne Superuser-Berechtigungen gewähren zu müssen. – BM5k

+0

@ BM5k Ich werde das als eine Antwort akzeptieren, wenn Sie einen darüber veröffentlichen. –

Antwort

1

Der wahrscheinlich beste Ansatz für den Fall, dass Sie den Standardmigrationsvorgang nicht durchführen können, ist, die Erweiterungen in template1 zu aktivieren, und zwar so, dass sie bei jeder neu erstellten Datenbank vorhanden sind. Denken Sie nur daran, ob Sie eine Sicherungskopie wiederherstellen möchten, die pg_dump zum Kopieren von template0 anstelle des Standardwerts von template1 verwendet hat.