PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Ruby / Rails tableau de chaînes à insérer PostgreSQL

Pour quelque chose comme ça, j'ignorerais les choses de citation et d'échappement d'ActiveRecord et j'irais directement à ActiveRecord::Base.connection.quote .

Le SQL avec lequel vous essayez de vous retrouver ressemble à ceci :

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

Vous pouvez utiliser quote convertir ' à '' (notez que SQL double les guillemets simples pour les échapper) mais vous devrez ajouter vous-même les parenthèses appropriées dans les VALEURS. La quote de la connexion ajoutera également les guillemets simples externes.

Quelque chose comme ça :

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

suivi de :

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

devrait faire l'affaire et être en sécurité.