PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Ruby / Rails array di stringhe da inserire in PostgreSQL

Per qualcosa del genere ignorerei le citazioni di ActiveRecord e le cose di escape e andrei direttamente a ActiveRecord::Base.connection.quote .

L'SQL che stai cercando di ottenere è qualcosa del genere:

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

Puoi usare quote per convertire ' a '' (nota che SQL raddoppia le virgolette singole per evitarle) ma dovrai aggiungere tu stesso le parentesi appropriate nei VALUES. quote della connessione il metodo aggiungerà anche le virgolette singole esterne.

Qualcosa del genere:

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

seguito da:

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

dovrebbe fare il trucco ed essere al sicuro.