ken*_*yee 3 postgresql archive
理想情况下,9.1中的新"WITH ROWS"功能支持跨越数据库边界,但它似乎只能在单个DB中工作.
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;
Run Code Online (Sandbox Code Playgroud)
我希望我能够将事件指定为"DELETE FROM LiveDB.events",然后我可以执行"INSERT INTO ArchiveDB.events".dblink似乎无法获取要移动的行列表,即使它确实如此,我也不确定此语句是否在跨DB的事务上是安全的...
您可以将数据转储到文件(使用SQL COPY或psql\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;
Run Code Online (Sandbox Code Playgroud)
插入ArchiveDB:
COPY events FROM '/tmp/events.csv' WITH CSV HEADER;
Run Code Online (Sandbox Code Playgroud)
希望有所帮助.
| 归档时间: |
|
| 查看次数: |
2126 次 |
| 最近记录: |