Mar*_*güe 6 postgresql liquibase
我正在尝试使用 Postgresql 的 COPY 命令从 .sql 文件上传大量数据。我的这些数据采用file.sql以下格式:
COPY my_table(id, name, status) FROM stdin;
1 peter active
1 steve active
1 maria active
\.
Run Code Online (Sandbox Code Playgroud)
我的变更集是这样的:
<changeSet id="sqlFile-example" author="me" >
<sqlFile encoding="UTF-8"
path="file.sql"
relativeToChangelogFile="true"
endDelimiter=";"
splitStatements="false"
/>
</changeSet>
Run Code Online (Sandbox Code Playgroud)
并得到这个错误:
[错误] 无法在项目 lincoln-soft 上执行目标 org.liquibase:liquibase-maven-plugin:3.6.3:update (default-cli):设置或运行 Liquibase 时出错:更改集 src/main/resources 迁移失败/db/liquibase/db-changelog.xml::sqlFile-example::me
[错误] 原因:liquibase.exception.DatabaseException:错误:从标准输入复制期间出现意外消息类型 0x50
[错误] 其中:COPY my_table,第 1 行 [失败的 SQL:COPY my_table(id, name, status) FROM stdin;
[错误] 1 彼得活跃
[错误] 1 史蒂夫活跃
[错误] 1 玛丽亚活跃
[错误] \。]
我有办法通过 liquibase 上传这些数据吗?
终于得到了一个解决方案,正如@a_horse_with_no_name和@Laurenz Albe提到的,不能COPY FROM STDIN直接在JDBC中使用,所以我用来pg_dump生成这样的插入语句:
pg_dump --table=public.my_table --data-only --column-inserts my_databse > /tmp/my_table_data.sql
它给了我一个my_table_data.sql包含如下插入语句的文件:
INSERT INTO public.my_table (id, name, status) VALUES (1,peter,active);
INSERT INTO public.my_table (id, name, status) VALUES (1,peter,active);
INSERT INTO public.my_table (id, name, status) VALUES (1,peter,active);
Run Code Online (Sandbox Code Playgroud)
然后我使用这个 liquibase Chageset 上传 sql 文件:
INSERT INTO public.my_table (id, name, status) VALUES (1,peter,active);
INSERT INTO public.my_table (id, name, status) VALUES (1,peter,active);
INSERT INTO public.my_table (id, name, status) VALUES (1,peter,active);
Run Code Online (Sandbox Code Playgroud)
这个对我有用
小智 3
正如 Laurenz 已经提到的:你不能直接在 JDBC 中使用 COPY FROM STDIN (你可以使用 CopyManager API 手动实现它,但 Liquibase 不支持这一点,我也不知道有任何插件可以做到这一点)
我建议您使用 Liquibase 的内置功能来加载 CSV(文本)文件。将输入数据放入 CSV 文件中,例如,my_table_data.txt为列添加标题行:
id,name,status
1,peter,active
1,steve,active
1,maria,active
Run Code Online (Sandbox Code Playgroud)
然后使用<loadData>而不是运行 SQL 脚本:
id,name,status
1,peter,active
1,steve,active
1,maria,active
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14149 次 |
| 最近记录: |