Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

214
Vistas
¿Cómo puedo ejecutar `SET ROLE` automáticamente para las migraciones de postgres ActiveRecord?

Me gustaría configurar usuarios específicos de la aplicación para una base de datos, solo con fines de auditoría/depuración, pero use el rol de usuario raíz "postgres" para la creación de tablas, ya que ya tiene los privilegios predeterminados configurados adecuadamente (y también porque en mi caso, la mayoría de las tablas ya son propiedad de ese usuario).

La aplicación solo necesitaría este permiso de creación/modificación de tablas al ejecutar migraciones, pero estaría bien si lo tuvieran todo el tiempo si fuera más fácil. Sin embargo, no he encontrado ninguna forma de usar SET ROLE con éxito en Rails.

Pensé que funcionaría agregar una nueva tarea de rake que establezca el rol antes de que se ejecute la tarea db:migrate , así:

 # in lib/tasks/set_role.rake namespace :db do task :set_role do ActiveRecord::Base.connection.execute("SET ROLE postgres") end end # in initializers/migration_hooks.rb Rake::Task["db:migrate"].enhance ["db:set_role_postsgres"]

Pero eso no funcionó...

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

No estoy seguro de por qué lo anterior no funcionó, pero tuve que poner todo esto en el archivo .rake y luego funcionó:

 # lib/tasks/migration_hooks.rb namespace :db do task set_role_postsgres: :environment do puts "Setting Role to 'postgres'" ActiveRecord::Base.connection.execute("SET ROLE postgres") end end Rake::Task["db:load_config"].enhance ["db:set_role_postsgres"]

Nota: La tarea db:load_config es un requisito previo para todas las tareas de db , por lo que debería manejar la configuración del rol no solo para db:migrate , sino también para db:migrate:up , db:migrate:down , db:rollback , etc.

over 4 years ago · Santiago Trujillo Denunciar

0

Acabo de encontrarme necesitando dicha funcionalidad, pero para todas las conexiones de ActiveRecord . En una aplicación Rails v7 utilicé el siguiente parche mono:

 module PostgreSQLAdapterWithSetRole def initialize(connection, logger, connection_parameters, config) super(connection, logger, connection_parameters, config) if config[:role] connection.exec("SET ROLE #{config[:role]};") end end end ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.prepend(PostgreSQLAdapterWithSetRole)

Esto lee un valor de configuración de role de database.yml de datos.yml y, si se establece un problema, SET ROLE inmediatamente después de establecer la conexión.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda