我有一个大文件转储 sql 数据加载到 postgresl (600mb+)。在该转储中,布尔值 true 和 false 的字段被表示为 1 和 0,不带引号。尝试将它们加载到 postgresql 中,导致抱怨,因为它不知道如何投射它们。
像这样加载...
psql --disable-triggers -1 -f /foo/bar/dump.sql
Run Code Online (Sandbox Code Playgroud)
由于大量的数据和布尔字段的散布 - 正则表达式通过适当地用真/假替换它们已被证明是不切实际的。
经过多次谷歌搜索后,我无法找到一种方法让 postgresql 在此数据加载期间接受 = true 和 0 = false。看起来很简单,但显然不是!
希望有人确切地知道如何解决它并可以帮助我!
Dea*_*ean 10
深入研究 postgresql 的黑暗魔法,我发现整数到布尔型转换可以从显式转换为自动强制转换。然后完成后改回来......
update pg_cast set castcontext='a' where casttarget = 'boolean'::regtype;
Run Code Online (Sandbox Code Playgroud)
然后用 pg_dump 加载。
完成后,将转换设置为默认值...
update pg_cast set castcontext='e' where casttarget = 'boolean'::regtype;
Run Code Online (Sandbox Code Playgroud)
重要提示:除非您知道它涉及什么,否则不要这样做。目录不能保证版本与版本兼容,现在可以安全(ish)做的事情在未来版本中可能会很糟糕,或者根本不起作用。
如果你想接受0和1为布尔值,你最好的选择可能是与定义为列创建表smallint与CHECK (colname >= 0 AND colname <= 1)条件。
导入后,您可以ALTER TABLE将类型更改为boolean并提供一个USING术语来进行类型转换。
或者,使用更灵活的数据加载器,例如pgloader、Pentaho Kettle、Talend Studio 等,而不是尝试COPY接受数据。
我认为,接受0/1是假/真希望至少对CSV模式COPY。如果您提交补丁,我希望它可能会被接受。
| 归档时间: |
|
| 查看次数: |
15045 次 |
| 最近记录: |