我有一个使用PostgreSQL的网站。我在我的站点中提供的所有内容都是在开发环境中创建的(这是因为它是webcrawler内容)。在生产环境中创建的唯一信息是关于用户的信息。
我需要找到一种更新存储在生产环境中的数据的好方法。我是否可以仅将在开发环境中更新的表恢复到生产环境中,PostgreSQL将在生产环境中更新这些记录,或者最好的方法是在生产环境中备份用户信息,在开发环境中插入这些信息,然后在生产环境中恢复整个数据库?
谢谢
发布于 2017-11-14 02:24:05
您可以使用pg_dump从开发环境中的非用户表导出数据,并使用pg_restore将数据导入prod。
-t开关将允许您选择特定表。
pg_dump -d <database_name> -t <table_name>
https://www.postgresql.org/docs/current/static/app-pgdump.html
发布于 2017-11-14 02:50:25
关于这个主题,here和here有很多技巧。我建议你在做任何事情之前先看看这些链接。
如果您的数据在每次更新过程中都被丢弃,那么一个普通的转储就足够了。您可以将pg_dump输出直接重定向到生产环境中连接的psql,以避免pg_restore步骤,如下所示:
#Of course you must drop tables to load it again
#so it'll be reasonable to make a full backup before this
pg_dump -Fp -U user -h host_to_dev -T=user your_db | psql -U user -h host_to_production your_db
你可能会问自己“为什么他说要丢掉我的桌子”?
在新表上大容量加载数据比删除旧数据并重新插入更快。引用文档中的话:
在预先存在的数据上创建索引比在加载每一行时以增量方式更新索引更快。
如果你不能同时在两个环境下连接,那么你需要手动执行pg_restore
。
Ps²:我不推荐这样做,但您可以在pg_dump上附加--clean
选项以自动生成DROP statements
。使用此选项时要格外小心,以避免丢失意外的对象。
https://stackoverflow.com/questions/47269887
复制相似问题