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

Ruby / Rails række af strenge til PostgreSQL indsæt

For noget som dette ville jeg ignorere ActiveRecord-citaterne og undslippende ting og gå direkte til ActiveRecord::Base.connection.quote .

Den SQL, du forsøger at ende med, er noget som denne:

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

Du kan bruge quote at konvertere ' til '' (bemærk, at SQL fordobler enkelte anførselstegn for at undslippe dem), men du skal selv tilføje de relevante parenteser i VÆRDIERNE. Forbindelsens quote metode vil også tilføje de ydre enkelte anførselstegn.

Noget som dette:

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

efterfulgt af:

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

bør gøre tricket og være sikker.




  1. Rails og PostgreSQL:Rolle postgres eksisterer ikke

  2. MySQL vælg et felt fra tabellen WHERE betingelse er i flere rækker

  3. Oracle SQL - Generer samlede rækker for bestemte rækker ved hjælp af select

  4. Har JDBC Postgres-driveren en måde at indstille client_encoding til at oprette forbindelse til databasen?