我ALTER TABLE
对一个非常大的表(大约3000万行)上的命令有疑问.其中一个列是a varchar(255)
,我想将其调整为a varchar(40)
.基本上,我想通过运行以下命令来更改我的列:
ALTER TABLE mytable ALTER COLUMN mycolumn TYPE varchar(40);
Run Code Online (Sandbox Code Playgroud)
如果进程很长,我没有问题,但似乎我的表在ALTER TABLE命令期间不再可读.有更聪明的方法吗?也许添加一个新列,从旧列复制值,删除旧列,最后重命名新列?
任何线索将不胜感激!提前致谢,
注意:我使用PostgreSQL 9.0.
我目前正在使用 Github 与基本的 Jenkins 集成(使用 Github 插件):每次我推送一些东西时,我的 Jenkins 测试都会被触发,并且状态会报告给 Github。
由于一些肮脏的原因(我知道根本原因在这里),我的测试可能会随机失败,然后向 Github 报告失败状态(这阻止了合并 PR 的可能性:这是预期的行为)。
您知道是否可以在不推送新提交的情况下重新启动测试吗?因为我知道如果我重新启动测试,它们就会通过。
提前致谢
这是我的用例:我在我的Git仓库中提交了PNG和其他东西.我想对我想要提交的每个PNG应用一个特定的进程,这是我最终想要提交的进程的结果(可能修改的PNG).
一开始我想到了一个钩子(比如a pre-commit
),但它有点奇怪,因为这个过程会改变文件,所以我需要重新添加它!根据我所读到的,没有pre-add
钩子(或类似的东西).
可能是一个解决方案是创建一个git别名?但我不想改变 - 太多 - 人们的工作方式,我正在寻找一种平稳透明的方式.
如果你有线索......即使线索是改变我的过程想法.
当我尝试在我的devel数据库节点上恢复一个大型数据库(几乎是32Go自定义格式)时,我遇到了一个小问题(这个节点的RAM,CPU比我的生产服务器少).
我的数据库转储使用类似于以下的命令生成:
pg_dump -F custom -b myDB -Z 9 > /backup/myDB-`date +%y%m%d`.pg91
Run Code Online (Sandbox Code Playgroud)
当我恢复它时,我使用以下命令:
pg_restore -F custom -j 5 -d myDB /backup/myDB-20130331.pg91
Run Code Online (Sandbox Code Playgroud)
但是在这里,每次恢复命令失败时都会出现如下错误:
pg_restore: [archiver (db)] error returned by PQputCopyData: server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
pg_restore: [archiver] worker process failed: exit code 1
pg_restore: [archiver (db)] error returned by PQputCopyData: server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request. …
Run Code Online (Sandbox Code Playgroud) postgresql ×2
alter-table ×1
dump ×1
git ×1
github ×1
hook ×1
jenkins ×1
pg-restore ×1
pull-request ×1
restore ×1
triggers ×1
varchar ×1