我在 bash 脚本中具有以下有效逻辑:
#copy records to delete file to respective servers. faster than running locally
scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null $dir/$server.records_to_delete.txt $server:/tmp/
# trigger the deletion on remote machine.
deletion_status=$(psql -U test testdb -h $server -c "CREATE TEMP TABLE tmp_cdr (id int); COPY tmp_widgets FROM '/tmp/$server.records_to_delete.txt'; DELETE FROM widgets USING tmp_cdr WHERE widgets.id = tmp_widgets.id;")
但我正在尝试将其合并为一个命令。因此,我不想将要删除的记录列表复制到远程服务器,而是将其保留在本地,并以某种方式使用本地文件创建 tmp_widgets。
如有任何建议,我们将不胜感激
最佳答案
您不需要将文件复制到服务器。您正在寻找的是 COPY
的 STDIN
:
cat records_to_delete.txt | psql $server -c "COPY tmp_widgets FROM STDIN;"
关于bash - 使用本地提供的列表从远程 postgresql 数据库中删除记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49307088/