Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

217
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda