在Postgresql 9.1中,将古代数据从一个数据库表归档到另一个数据库表?
理想情况下,9.1中的新“WITH ROWS”功能支持跨越数据库边界,但它似乎只在单个数据库中工作在Postgresql 9.1中,将古代数据从一个数据库表归档到另一个数据库表?,postgresql,archive,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; 将移动
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;
将移动的行作为(
从事件中删除
哪里
“日期”>=“2010-01-01”和
“日期”<'2011-01-01'
返回*
)
插入到事件\u存档中
从移动的行中选择*;
我希望能够将事件指定为类似“从LiveDB.events中删除”,然后可以执行“插入ArchiveDB.events”。
dblink似乎无法使行列表移动,即使它移动了,我也不确定此语句在整个DBs中的事务安全性…您可以将数据转储到文件(使用SQL或)中,并在一个事务中删除它,然后在另一个事务中将其导入另一个数据库。要在单个事务中执行这两个步骤,您需要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;
希望这能有所帮助。刚刚开始学习postgres,但如果这能奏效,我的很多问题都会迎刃而解。虽然我不喜欢将数据转储到文件中以便再次读取。。。它可能适用于某些粗糙的场景。是的,使用dblink执行此操作会更干净,但正如您在问题中所述,dblink不支持跨数据库边界的事务。在这种情况下,架构可能很有用。它们能满足你的需要吗?
COPY events FROM '/tmp/events.csv' WITH CSV HEADER;