sql >> Databasteknik >  >> RDS >> PostgreSQL

Ruby / Rails-array av strängar till PostgreSQL-inlägg

För något sådant här skulle jag ignorera ActiveRecord-citat och escape-grejer och gå direkt till ActiveRecord::Base.connection.quote .

Den SQL du försöker sluta med är ungefär så här:

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

Du kan använda quote för att konvertera ' till '' (observera att SQL dubblar enkla citattecken för att undvika dem) men du måste själv lägga till lämpliga parenteser i VÄRDEN. Anslutningens quote metod kommer också att lägga till de yttre enstaka citattecken.

Något så här:

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

följt av:

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

bör göra susen och vara säker.




  1. Hur genererar man Dynamic Order by klausul i PL/SQL-proceduren?

  2. Hur testar man i och mellan var och en av flera tabeller?

  3. Udda INNER JOIN syntax och inkapsling

  4. PL/SQL använder VARRAY i IN CLAUSE