You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Flyway迁移脚本时如何从文件读取数据填充数据库表?

错误原因分析

  • PostgreSQL的COPY FROM默认读取的是数据库服务端的本地文件系统路径,你填写的/sql_scripts/user.txt是项目类路径,数据库服务无法识别该路径,这是报错的核心原因
  • 你创建的表名为users,原COPY语句中写的profile是主键约束名而非表名,表名不匹配也会触发报错
  • 未指定导入列:users表第一列是自动生成的UUID字段id,原COPY语句未指定导入列,会默认尝试匹配所有列,和txt里的2个字段数量不匹配
  • user是PostgreSQL保留关键字,直接作为字段名使用需要加引号包裹

修复方案

方案一:改用INSERT语句(最稳妥,无路径依赖)

直接把测试数据写为Flyway版本化的INSERT脚本,不需要依赖外部txt文件,修改copy.sql内容如下:

INSERT INTO users (em, "user") VALUES
('m@mai.com', 'sara'),
('s@yandex.ru', 'jacobs');

方案二:保留COPY逻辑的修改方式

如果必须用COPY命令导入txt,按以下步骤修改:

  1. 把txt文件路径改为数据库服务可访问的绝对路径,比如你本地项目对应的路径/Users/xxx/你的项目名/src/main/resources/sql_scripts/user.txt
  2. 修正COPY语句的表名、列名、解析参数:
COPY users (em, "user") FROM '替换为你的txt文件绝对路径'
DELIMITER ',' NULL '\null' QUOTE '''';
  1. 可选调整:可以去掉user.txt里字段前后的单引号,同时去掉COPY语句里的QUOTE ''''参数,减少格式匹配问题

Flyway适配优化建议

如果要让导入逻辑随项目打包无路径依赖,建议把数据文件放在src/main/resources/db-migration目录下,或者直接转为INSERT语句作为版本化迁移脚本,避免生产环境文件路径不一致的问题。

内容的提问来源于stack exchange,提问作者skyho

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 09:27:00