可以从 SQL 脚本中引用另一个 SQL 文件

Men*_*los 9 postgresql spring hibernate jpa

基本上我想从 Postgres 中的 SQL 文件执行一个 SQL 文件。

mysql 的类似问题:是否可以从另一个 sql 脚本中的存储过程调用 sql 脚本?

为什么?

因为我在一个项目中有 2 个数据文件,我希望有一行可以被注释/取消注释以加载第二个文件。

说明: 我想从 A.SQL 调用 B.SQL

说明 2: 这是针对使用 hibernate 从初始 SQL 文件 (A.SQL) 创建数据库的 Spring 项目。

经过进一步思考,似乎我可能不得不从 java/string/hibernate 处理这个问题。

下面是配置文件:

spring.datasource.url=jdbc:postgresql://localhost:5432/dbname
spring.datasource.username=postgres
spring.datasource.password=root
spring.datasource.driver-class-name=org.postgresql.Driver

spring.datasource.data=classpath:db/migration/postgres/data.sql
spring.jpa.hibernate.ddl-auto=create
Run Code Online (Sandbox Code Playgroud)

Tom*_*ico 7

Sql中不支持导入其他文件,但是如果你用psql执行脚本可以使用\i语法:

SELECT * FROM table_1;
\i other_script.sql
SELECT * FROM table_2;
Run Code Online (Sandbox Code Playgroud)

如果您与其他客户端一起执行 sql,这可能不起作用psql


Tob*_*fke 1

休眠只是:

  1. 逐行读取所有 SQL 文件
  2. 删除任何注释(以--,//或开头的行/*
  3. 删除;最后的任何内容
  4. 将结果作为单个语句执行

(参见SchemaExport.importScriptSingleLineSqlCommandExtractor

这里不支持包含。

你可以做什么:

  • 定义您自己的ImportSqlCommandExtractor知道如何包含文件的文件 - 您可以使用以下命令设置该提取器hibernate.hbm2ddl.import_files_sql_extractor=(fully qualified class name)
  • 使用 将可选文件定义为附加导入文件hibernate.hbm2ddl.import_files=prefix.sql,optional.sql,postfix.sql,您可以根据需要添加和删除文件引用,甚至可以从工件中排除该文件 - 丢失的文件只会创建调试消息。
  • 创建一个动态Integrator设置hibernate.hbm2ddl.import_files属性的方法 - 根据某些环境属性