PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

JavaScript (Postgres DB) - Как да използвате подготвен израз с масив като параметър в клаузата WHERE IN ( )

Описано е в ЧЗВ на node-postgres https://github.com/brianc/node-postgres/wiki/FAQ#11-how- do-i-build-a-where-foo-in--query-to-find-rows-matching-an-array-of-values

Как да създам WHERE foo IN (...) заявка, за да намеря редове, съответстващи на масив от стойности? node-postgres поддържа картографиране на прости JavaScript масиви към PostgreSQL масиви, така че в повечето случаи можете просто да го подадете като всеки друг параметър

client.query("SELECT * FROM stooges WHERE name = ANY ($1)", [ ['larry', 'curly', 'moe'] ], ...);

Имайте предвид, че =ANY е друг начин за запис на IN (...), но за разлика от IN (...) ще работи както бихте очаквали, когато подадете масив като параметър на заявка.

Ако знаете дължината на масива предварително, можете да го изравните до IN списък:

// passing a flat array of values will work:
client.query("SELECT * FROM stooges WHERE name IN ($1, $2, $3)", ['larry', 'curly', 'moe'], ...);

... но има малка полза, когато =ANY работи с JavaScript масив.

Ако използвате стара версия на node-postgres или трябва да създадете по-сложни PostgreSQL масиви (масиви от съставни типове и т.н.), с които node-postgres не се справя, можете да генерирате литерал на масив с динамичен SQL, но бъдете изключително внимателни с SQL инжектирането, когато правите това. Следният подход е безопасен, защото генерира низ на заявка с параметри на заявка и изравнен списък с параметри, така че все още използвате поддръжката на драйвера за параметризирани заявки („подготвени изрази“) за защита срещу SQL инжектиране:

var stooge_names = ['larry', 'curly', 'moe'];
var offset = 1;
var placeholders = stooge_names.map(function(name,i) { 
    return '$'+(i+offset); 
}).join(',');
client.query("SELECT * FROM stooges WHERE name IN ("+placeholders+")", stooge_names, ...);

Надявам се, че това помага, тъй като Google не успява да намери това




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Правилният начин за използване НЕ В Postgres

  2. Как да свържете postgresql в hibernate.cfg.xml

  3. Грешка с auto_increment при свързване към Postgres чрез psql и puTTY

  4. Бавна postgres заявка при свързване на големи таблици

  5. Поточно предаване на PostgreSQL срещу логическа репликация – Сравнение