sql >> Databáze >  >> RDS >> PostgreSQL

Ruby / Rails pole řetězců pro vložení PostgreSQL

Pro něco takového bych ignoroval ActiveRecord citace a escapování a šel rovnou na ActiveRecord::Base.connection.quote .

SQL, se kterým se pokoušíte skončit, je něco takového:

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

Můžete použít quote převést ' na '' (všimněte si, že SQL zdvojuje jednoduché uvozovky, aby je uniklo), ale budete muset sami přidat příslušné závorky do VALUES. quote připojení metoda také přidá vnější jednoduché uvozovky.

Něco takového:

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

následuje:

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

by měl udělat trik a být v bezpečí.




  1. INSERT a SELECT v jediném dotazu MySQL

  2. Proč Hibernate přešel na používání LONG přes CLOB?

  3. PHP, textové ozvěny mimo databázi bez nového řádku, vše v jednom kuse

  4. Ruby PostgreSQL tutoriály