我有一个postgres数据库,它有一个bytea列,其中包含损坏的数据。我已经将一个旧的备份恢复到另一台机器上,并且可以看到该数据没有损坏,如下所示。当我比较损坏和恢复的结果时,结果是不同的。
SELECT recordid,encode(secretkey::bytea, 'hex') FROM table;我只想知道将bytea列从恢复的表导出到损坏的表的最好方法,这样数据就可以完全按原样传输。
发布于 2021-05-05 15:53:48
您可以使用dblink连接到恢复服务器,并通过recordid更新您的secretkey联接。在损坏的DB服务器上,您将执行:
UPDATE table SET
secretkey = t.secretkey
FROM
dblink(
'host=your.host dbname=recoverydb...',
'SELECT recordid, secretkey FROM table'
) t(recordid integer, secretkey bytea)
WHERE
recordid = t.recordid 您可以使用foreign data wrapper而不是dblink来访问恢复的数据。
您可以备份table,然后将其恢复到名为table_recovered的数据库中,并在update语句的FROM部分中使用它。
发布于 2021-05-10 13:19:00
感谢您提供的信息。我假设您可以跨多个数据库运行查询,如果它们在同一个PSQL实例中,但显然不是,所以dblink对我有很大帮助。我最终备份了工作表,并将其作为mm_backup恢复到生产PSQL实例中,并执行以下操作以供参考。
CREATE EXTENSION dblink;
UPDATE mediarecords
SET secretkey = T1.secretkey
FROM dblink('host=localhost user=xxxxx password=xxxxx dbname=mm_backup',
'SELECT recordid, secretkey FROM mediarecords'
) AS T1(recordid integer, secretkey bytea)
WHERE
mediarecords.recordid = T1.recordid;https://stackoverflow.com/questions/67394890
复制相似问题