【问题标题】:It is possible to reference another SQL file from SQL script可以从 SQL 脚本引用另一个 SQL 文件
【发布时间】:2016-01-12 05:12:21
【问题描述】:

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

mysql 的类似问题:is it possible to call a sql script from a stored procedure in another sql script?

为什么?

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

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

澄清2: 这适用于使用休眠从初始 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

【问题讨论】:

  • 你想如何执行sql文件?用 psql 吗?
  • @Tommaso Di Bucchianico 我想从另一个文件中调用一个 sql 文件。

标签: spring hibernate postgresql jpa


【解决方案1】:

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

SELECT * FROM table_1;
\i other_script.sql
SELECT * FROM table_2;

如果您使用除psql 以外的其他客户端执行 sql,这可能不起作用。

【讨论】:

  • 对啊,你还是不说要怎么执行脚本
  • 它在 Java Spring 项目中通过休眠运行。你的权利,我没有。我认为也许我需要在 hibernate/java 中处理这个问题。
【解决方案2】:

休眠只是:

  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 属性 - 取决于某些环境属性

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-12
    • 1970-01-01
    • 1970-01-01
    • 2011-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多