Rails n’offre pas de solution toute faite pour le chargement et le remplacement des procédures stockées.
Si comme pour moi la solution rake db:structure:dump ne vous suffit pas il est rapide d’ajouter une tâche du type rake db:stored_proc:load en quelques lignes.

Rails et les procédures stockées

La méthode consiste à enregistrer les procédures stockées dans le dossier db/stored_procedures au format SQL et de les recharger avec une tâche rake.

Contenu de la tâche rake lib/tasks/stored_procedures.rake :

namespace :db do
 namespace :stored_procedures do
   desc 'Create or update stored procedures found in db/stored_procedures'
   task :load => :environment do
     Dir.glob([Rails.root, "db", "stored_procedures", "*.sql"].join("/")).each do |file|
       ActiveRecord::Base.connection.execute File.read(file)
     end
   end
 end
end

Contenu du fichier exemple db/stored_procedures/example.sql :

CREATE OR REPLACE FUNCTION example() RETURNS table(
 id int,
 parent_id int,
 title text
) AS $$

[CODE]

SELECT * FROM example
$$ LANGUAGE SQL;

Finalement, la commande "rake db:stored_procedure:load" chargera le fichier et l’exécutera dans la base de donnée. Cette technique est valable pour d’autre fonctions SQL non supportées par Rails (donc généralement très spécifique au RDBMS employé).