sql >> Base de Datos >  >> RDS >> PostgreSQL

Matriz Ruby / Rails de cadenas para insertar PostgreSQL

Para algo como esto, ignoraría las citas y escapes de ActiveRecord e iría directamente a ActiveRecord::Base.connection.quote .

El SQL con el que intenta terminar es algo como esto:

INSERT INTO TABLE (column)
SELECT column FROM TABLE
UNION VALUES ('example one''s value'), ('example (2) value')
EXCEPT SELECT column FROM TABLE

Puedes usar quote para convertir ' a '' (tenga en cuenta que SQL duplica las comillas simples para escapar de ellas) pero tendrá que agregar los paréntesis apropiados en los VALORES usted mismo. La quote de la conexión El método también agregará las comillas simples externas.

Algo como esto:

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

seguido de:

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

debería hacer el truco y estar seguro.