Использование dblink здесь ничего не меняет. Если вы хотите сделать это в одном операторе, вы можете объединить RETURNING, CTE и DELETE ... USING, так же, как если бы вы выбирали из локальной таблицы.
WITH T as (
INSERT INTO testtable select * from
dblink('host=localhost
user=postgres
password=root
dbname=postgres', 'select * from testtable') as testtable(
id bigint,
name character varying
)
RETURNING *
)
DELETE from foo USING t where foo.id=t.id
Есть и другие способы мог бы сформулировать это также.