PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Matriz de strings Ruby/Rails para inserção do PostgreSQL


Para algo assim, eu ignoraria o ActiveRecord citando e escapando coisas e iria direto para ActiveRecord::Base.connection.quote .

O SQL com o qual você está tentando terminar é algo assim:
INSERT INTO TABLE (column)
SELECT column FROM TABLE
UNION VALUES ('example one''s value'), ('example (2) value')
EXCEPT SELECT column FROM TABLE

Você pode usar quote para converter ' para '' (observe que o SQL dobra aspas simples para escapar delas), mas você mesmo terá que adicionar os parênteses apropriados nos VALUES. A quote da conexão O método também adicionará as aspas simples externas.

Algo assim:
values = array_of_strings.map { |s| "(#{ActiveRecord::Base.connection.quote(s)})" }.join(',')

Seguido por:
sql = %Q{
    INSERT INTO TABLE (column)
    SELECT column FROM TABLE
    UNION VALUES #{values}
    EXCEPT SELECT column FROM TABLE
}

deve fazer o truque e ser seguro.