我有一个 PostgreSQL 数据库,只有一张表。每天,我都想导出数据WHERE date='whatever'
,所以它只转储我今天管理的数据。
然后,我转到另一个数据库,并导入该 DUMP 文件,但我不想覆盖我已经拥有的文件,而是想追加到它......
我正在尝试在 C# 控制台应用程序上执行此操作...有什么建议吗?
谢谢你。
我有一个 PostgreSQL 数据库,只有一张表。每天,我都想导出数据WHERE date='whatever'
,所以它只转储我今天管理的数据。
然后,我转到另一个数据库,并导入该 DUMP 文件,但我不想覆盖我已经拥有的文件,而是想追加到它......
我正在尝试在 C# 控制台应用程序上执行此操作...有什么建议吗?
谢谢你。
不要这样做。为此目的使用现有维护良好的解决方案之一,如 Bucardo、Londiste、Slony-I 等。
请参阅Pg wiki 上的复制。
Londiste 至少可以应对被停止,然后在您希望它赶上时恢复,因此您可以根据需要将其作为每日批处理运行。
如果您要处理的只是一个仅插入表,那么您可以避免完全复制的需要;你所需要的只是
psql -h host1 db1 -c \
"\copy (SELECT * FROM the_table WHERE the_date = '2012-01-01') TO stdout" \
| psql -h host2 db2 -c \
"\copy the_table FROM STDIN"
您可以在您的 C# 应用程序中执行相同的操作,方法是建立两个 PostgreSQL 连接,一个连接一个COPY FROM
,另一个连接一个COPY TO
,然后复制它们之间的行。您会发现 nPgSQL 的支持COPY
对此很有用。