Plugin para usar esquemas do PostgreSQL com JRuby
Se alguém aqui já teve que fazer uma aplicação razoavelmente grande com rails e PostgreSQL, ou se mesmo sem a aplicação ser muito grande teve necessidade usar os “esquemas” do postgresql, viu que o rails, mesmo com o ruby, tem alguma dificuldade para trabalhar com eles.
Usando rails 1.x você podia usar algo como:
set_table_name “financeiro.pagamentos”
Já usando o rails 2.x isso gera um erro nas consultas no postgresql pois em um find normal a consulta é montada assim:
select * from “financeiro.pagamentos”
ao invés de
select * from “financeiro”.“pagamentos”
No rails 2 você consegue usar tabelas em vários esquemas desde que eles estejam no search_path, o que nem sempre é viável em algumas aplicações, sem contar que isso não funciona para a operações onde se precisa ler os metadados da tabela, uma vez que é necessário pesquisar os metadados no PostgreSQL usando o nome da tabela e o nome do esquema.
O bom é que a gente quase não usa consultas de metadados.
O ruim é que no Jruby elas são executadas a todo momento, pois o driver JDBC precisa saber os tipos de cada coluna para montar o result set e retornar para a aplicação cliente. Assim uma aplicação rails que acessa tabelas em diferentes esquemas ao ser migrada para de ruby para jruby simplesmente para de funcionar.
A solução que encontrei para isso foi criar um plugin através do qual eu tenho um metodo set_schema_name, semelhante ao set_table_name, assim eu posso especificar o nome do esquema onde está a tabela. Esse plugin pode ser usado também nso migrates para definir o esquema onde você está executando seus migrates.
Veja abaixo como é facil:
class CreatePagamento < ActiveRecord::Migration
set_schema_name :financeiro
def self.up
…
end
class Pagamento < activeRecord::Base
acts_as_schema_support
set_schema_name :financeiro
end
Por enquanto o plugin é só para JRuby, mas em breve vou fazer ele funcionar no Ruby também.
Aproveitei para ver como funciona o github e publiquei o plugin lá:
http://github.com/mondrian/acts_as_schema_support
Dúvidas, críticas e sugetões, enviem e-mail pra mim: coutinho em mondriantecnologia.com

[...] http://coutinho.mondriantecnologia.com/archives/55 [...]
Pingback by Plugin para usar esquemas do PostgreSQL com JRuby - DbRunas — February 3, 2009 @ 9:27 pm
Interessante, vi poucas coisas em JRuby apesar de ouvir falar muito bem. Parabéns.
Comment by Fernando Ike — February 4, 2009 @ 5:57 pm
Maybe you can contact Jeremy Kemper from 37signals to integrate your solution. He knows this problem. See http://rails.lighthouseapp.com/projects/8994/tickets/390-postgres-adapter-quotes-table-name-breaks-when-non-default-schema-is-used
Comment by Schuster — March 8, 2009 @ 2:16 pm
Hello Schuster, thanks for the tip.
Comment by coutinho — March 9, 2009 @ 3:16 am