postgresql - 在 Postgresql 9.1 中将古代数据从一个数据库表归档到另一个数据库表?

标签 postgresql archive

理想情况下,9.1 中新的“WITH ROWS”功能应该支持跨数据库边界,但它似乎只能在单个数据库中工作。

WITH moved_rows AS (
    DELETE FROM events
    WHERE
        "date" >= '2010-01-01' AND
        "date" < '2011-01-01'
    RETURNING *
)
INSERT INTO events_archive
SELECT * FROM moved_rows;

我希望我能够将事件指定为类似“DELETE FROM LiveDB.events”的内容,然后我可以执行“INSERT INTO ArchiveDB.events”。 dblink 似乎无法获取要移动的行列表,即使可以,我也不确定此语句在数据库中是否是事务安全的...

最佳答案

您可以将数据转储到文件(使用 SQL COPYpsql \copy )并在一个事务中将其删除,然后在另一个事务中将其导入另一个数据库。要在单个事务中执行这两个步骤,您需要 XA(分布式事务)。

从 LiveDB 转储

BEGIN TRANSACTION;
COPY (
  SELECT * FROM events
  WHERE "date" >= '2010-01-01'
  AND   "date" < '2011-01-01'
) TO '/tmp/events.csv' WITH CSV HEADER;

DELETE FROM events
WHERE "date" >= '2010-01-01'
AND   "date" < '2011-01-01'
COMMIT;

插入 ArchiveDB:

COPY events FROM '/tmp/events.csv' WITH CSV HEADER;

希望对您有所帮助。

关于postgresql - 在 Postgresql 9.1 中将古代数据从一个数据库表归档到另一个数据库表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9336922/

相关文章:

ruby-on-rails - Rails 5 如何保存 postgres 中两个日期时间之间的小时和分钟差异?

postgresql - 控制台访问 Dokku 的 PostgreSQL 插件?

ios - 尝试上传 iOS 应用程序,无法存档

c# - Asp .NET 从 tar.gz 存档中读取文件

archive - 在回程机上恢复旧网站

mysql - 异构数据库连接

javascript - 在 pg-promise 中使用助手时如何设置列

sql - plpgsql 中采用 bigint 的 pseudo_encrypt() 函数

ios - 远程创建 iPA 或存档构建

java - 如何用java读取rar文件的注释?