Wenn Sie den Text mit IPs, die durch Zeilenumbrüche getrennt sind, in der Datenbank oder Ihrem Client haben, würde diese Abfrage den Job erledigen:
Die Liste in ein Array umwandeln, es entfalten und mit der Haupttabelle verknüpfen:
SELECT *
FROM (SELECT unnest(string_to_array(your_list_of_ips, E'\n')) AS ip) sub
JOIN data_transfers d USING (ip);
Mehr über die verwendete Funktion finden Sie im Handbuch hier.
Um direkt aus einer Datei zu importieren, könnten Sie COPY
verwenden. Die Datendatei muss sich auf demselben Rechner wie Postgres befinden und Sie müssen ein Datenbank-Superuser dafür sein.
Diesmal haben wir bereits eine einzelne IP pro Zeile:
CREATE TEMP TABLE tmp(ip text);
COPY tmp FROM '/path/to/file';
SELECT *
FROM tmp
JOIN data_transfers d USING (ip);
Wenn Ihre Datei auf einem anderen Rechner ist oder wenn Sie keine Superuser-Rechte haben, verwenden Sie stattdessen das (weitgehend) äquivalente \copy
von psql. Um es aus der Bash heraus zu tun (wie im Kommentar angefordert):
psql dbname
dbname=# \set ips `cat ips.txt`
dbname=# SELECT *
dbname-# FROM (SELECT unnest(string_to_array(:'ips', E'\n')) AS ip) sub
dbname-# JOIN data_transfers d USING (ip);
\set
ist die psql-Metakommando zum Setzen einer Variable - in diesem Fall mit dem Inhalt einer Datei.
ips.txt
ist Ihre Datei mit IPs.
:'ips'
ist die Syntax für einfach-gequotete SQL-Interpolation.