gpt4 book ai didi

postgresql - 从标准输入复制在 liquibase 中不起作用

转载 作者:行者123 更新时间:2023-12-05 00:57:56 27 4
gpt4 key购买 nike

我正在尝试使用 Postgresql 的 COPY 命令从 .sql 文件上传大量数据。我在 file.sql 中有这些数据,格式如下:

COPY my_table(id, name, status)  FROM stdin; 
1 peter active
1 steve active
1 maria active
\.

我的变更集是这样的:

<changeSet id="sqlFile-example" author="me" >
<sqlFile encoding="UTF-8"
path="file.sql"
relativeToChangelogFile="true"
endDelimiter=";"
splitStatements="false"
/>
</changeSet>

并得到这个错误:

[ERROR] Failed to execute goalorg.liquibase:liquibase-maven-plugin:3.6.3:update (default-cli) onproject lincoln-soft: Error setting up or running Liquibase: Migrationfailed for change setsrc/main/resources/db/liquibase/db-changelog.xml::sqlFile-example::me

[ERROR] Reason: liquibase.exception.DatabaseException: ERROR: unexpected message type 0x50 during COPY from stdin

[ERROR] Where:COPY my_table, line 1 [Failed SQL: COPY my_table(id, name, status)FROM stdin;

[ERROR] 1 peter active

[ERROR] 1 steve active

[ERROR] 1 maria active

[ERROR] \.]

我有办法通过 liquibase 上传这些数据吗?

最佳答案

终于找到了解决方案,就像@a_horse_with_no_name 和@Laurenz Albe 提到,不能在JDBC中直接使用COPY FROM STDIN,所以我使用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);

然后我使用这个 liquibase Chageset 上传 sql 文件:

<changeSet id="sqlFile-example" author="me" >
<sqlFile encoding="UTF-8"
path="my_table_data.sql"
relativeToChangelogFile="true"
splitStatements="true"
stripComments="true"
/>
</changeSet>

对我有用

关于postgresql - 从标准输入复制在 liquibase 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59214217/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com