1h45 contra um limite de 2 horas ainda deixa pouca folga, e eu olharia primeiro pra reinserção, não pra cópia. Com SET CONSTRAINTS ALL IMMEDIATE, cada linha que volta pra blog_comment dispara o trigger de FK e faz um lookup em blog_post, e cada índice da tabela é atualizado linha a linha durante o INSERT. Como o banco é um snapshot restaurado e descartável, dá pra testar duas coisas. Dropar os índices que não são PK antes da reinserção e recriar no fim, porque CREATE INDEX em cima da tabela cheia sai bem mais barato que manter índice durante a carga. E rodar o INSERT com session_replication_role = replica, que desliga os triggers de FK (precisa de superuser, mas no banco temporário isso não é problema). Esse segundo tira a rede de segurança que vocês queriam, então eu passaria a checagem pro final, com um SELECT de órfãos por FK gerado pelo mesmo _meta que já monta as tabelas keep. Vocês chegaram a medir quanto desse 1h45 é cópia e quanto é volta?
1