- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个奇怪的问题。我们试图为我们的本地环境创建一个数据库基线,其中预先植入了非常具体的数据。我们希望确保每个人都在使用相同的数据进行操作,从而使协作和审查代码变得更加简单。
我的想法是,每当我们运行迁移或决定本地开发需要一个新帐户时,运行一个命令来转储数据库。这个问题是数据库转储大约 17MB。我试图避免每次更新数据库时都必须向 GitHub 添加 17MB 的文件。
所以我能想到的最佳解决方案是设置一个脚本来转储数据库中的每个单独的表。这样,如果更新了单个表,我们只会将该备份推送到 GitHub,并且它会是一个大约 200kb 的文件,而不是 17mb。
我遇到的主要问题是尝试恢复数据库。使用完整转储,处理外键相对简单,因为它全部在单个恢复命令中完成。但是随着多次恢复,它变得有点复杂。
我正在寻找一种方法将所有表恢复到数据库中,忽略触发器和约束,然后在填充数据后再次启用它们。 (或根据外键的定义顺序找到一种导出表的方法)。有很多表需要处理,因此手动执行此操作会有些困难。
如果我禁用/重新启用约束,我还担心数据库的关系完整性。任何帮助或建议将不胜感激。
现在我在每个表上运行以下命令:
pg_dump postgres://user:password@pg:5432/database -t table_name -Fc -Z9 -f /data/www/database/data/table_name.bak
然后这个命令将所有备份恢复到数据库。
$data_command = "pg_restore --disable-triggers -d $dbUrl -Fc \"%s\"";
$backups = glob("$directory*.bak");
foreach($backups as $data_file){
if($data_file != 'data_roles.bak') {
exec(sprintf($data_command, $data_file));
}
}
这显然行不通,因为我遇到了大量“关系不存在”错误。我想我只是在寻找一种更好的方法来实现这一目标。
最佳答案
我会将表数据和数据库元数据分开。
创建一个前后数据脚本
pg_dump --section=pre-data -f pre.sql mydb
pg_dump --section=post-data -f post.sql mydb
然后只转储每个表的数据:
pg_dump --section=data --table=tab1 -f tab1.sql mydb
恢复数据库,先恢复pre.sql
,再恢复所有表数据,再恢复post.sql
。
前后的数据会经常变化,但不会很大,所以这应该不是问题。
关于postgresql - 将 pg_restore 与多个转储一起使用时管理外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54239004/
我正在为我的应用程序使用 Tank-Auth。我唯一的问题是激活和重置帐户密码。 用于登录、注册、注销;我对这些代码没有问题; $route['login'] = "/auth/login"; $ro
我是一名优秀的程序员,十分优秀!