PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Ruby / Rails Array von Strings in PostgreSQL einfügen

Für so etwas würde ich die ActiveRecord-Zitate und Escapezeichen ignorieren und direkt zu ActiveRecord::Base.connection.quote gehen .

Das SQL, das Sie erreichen möchten, sieht ungefähr so ​​aus:

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

Sie können quote verwenden um ' umzuwandeln zu '' (Beachten Sie, dass SQL einfache Anführungszeichen verdoppelt, um sie zu maskieren), aber Sie müssen die entsprechenden Klammern selbst in die VALUES einfügen. Das quote der Verbindung -Methode fügt auch die äußeren einfachen Anführungszeichen hinzu.

Etwa so:

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

gefolgt von:

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

sollte den Zweck erfüllen und sicher sein.