2015-10-14 145 views
2

基本上我想從Postgres中的SQL文件執行SQL文件。可以從SQL腳本中引用另一個SQL文件

爲MySQL類似的問題:is it possible to call a sql script from a stored procedure in another sql script?

爲什麼?

因爲我有一個項目中有2個數據文件,我想要一行可以加載第二個文件的註釋/未註釋。

澄清: 我想從A.SQL調用B.SQL

Clarification2: 這對於那些使用Hibernate創建從最初的SQL文件數據庫中的Spring項目(A. SQL)。

進一步反思,似乎我可能不得不從java /字符串/休眠處理這個。

下面是配置文件:在SQL不支持

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 
+0

你怎麼想執行的SQL文件?用psql? –

+0

@Tommaso Di Bucchianico我想從另一個文件調用一個sql文件。 –

回答

1

Hibernate的只是:

  1. 閱讀每行所有的SQL文件行
  2. 條任何評論(線開始--///*
  3. 刪除末
  4. 任何;以單個語句執行結果

(請參閱SchemaExport.importScriptSingleLineSqlCommandExtractor

這裏不包含對include的支持。

你可以做什麼:

  • 定義自己的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財產 - 這取決於一些環境屬性
2

的其他文件的導入,但如果你用psql執行該腳本可以使用\i語法:

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

如果您使用psql以外的其他客戶端執行sql,則這可能不起作用。

+0

我試過....它只能通過控制檯。 +1雖然... –

+0

是的,你仍然沒有說你想如何執行腳本 –

+0

它通過Java Spring項目中的Hibernate運行。你的權利,我沒有。我認爲也許我需要在hibernate/java中處理這個問題。 –