【问题标题】:Execute service builder generated sql file on postgresql在 postgresql 上执行服务生成器生成的 sql 文件
【发布时间】:2014-08-29 07:43:41
【问题描述】:

我想执行服务生成器生成的 sql 文件,但问题是 sql 文件包含以下类型:LONG、VARCHAR...等

其中一些类型在 Postgresql 上不存在(例如 LONG 是 Bigint)。

不知道有没有简单的方法可以转换sql文件的结构,以便在Postgresql上运行?

【问题讨论】:

  • “服务构建者”。什么服务构建器?
  • 那些 sql 文件不是要执行的“最终”sql 查询。它们是为 ServiceBuilder 设计的,而不是为人类使用而设计的。 ServiceBuilder 正在根据检测到的数据库服务器修改它们,然后在 liferay 中运行它们。因此,您需要深入研究 ServiceBuilder 源代码以了解其中发生了什么。

标签: sql database hibernate postgresql liferay


【解决方案1】:

在插件上执行ant build-db,你会发现带有不同供应商特定脚本的sql文件夹。

【讨论】:

  • 对不起先生,但是我认为您到目前为止情况很简单,我有一个file.sql,我想在postgresql数据库上运行它,这个sqlfile是由liferay生成的问题是我无法运行此脚本(或 sql 文件),因为它不尊重 postgresql 语法...例如:postgresql 可以接受:创建表实体(id Bigint not null 主键,);和否:创建表实体(id LONGnot null 主键,);我认为 liferay 可以管理这个故事,并使用适当的 SGBD 调整服务生成器生成的脚本!
  • 你执行ant build-db了吗?这将在docroot/WEB-INF/sql/create(和其他并行)中创建一个文件夹,就像 Daniele 描述的那样。其中的示例文件名是create-postgresql.sql
【解决方案2】:

Daniele 是对的,使用build-db 任务显然是正确的,并且是正确的方法。

但是...我记得前段时间有类似的情况,我只有 liferay-pseudo-sql 文件,需要创建适当的 DDL。我设法通过以下方式做到这一点:

你需要让 Liferay 在你的桌面上运行(或者在源 sql 文件所在的机器上),因为这个操作需要完全连接门户 spring 上下文。

  • 转到配置 -> 服务器管理 -> 脚本
  • 将语言更改为 groovy

运行以下脚本:

import com.liferay.portal.kernel.dao.db.DB
import com.liferay.portal.kernel.dao.db.DBFactoryUtil

DB db = DBFactoryUtil.getDB(DB.TYPE_POSTGRESQL)

db.buildSQLFile("/path/to/folder/with/your/sql", "filename")

第一个参数显然是路径,第二个是文件名没有.sql 扩展名。磁盘上的文件应该有适当的扩展名:必须称为filename.sql

这将在您的 filename.sql 旁边生成 tables 文件夹,其中将包含单个 tables-postgresql.sql 和您的 Postgres DDL。

据我所知,Service Builder 使用相同的方法来生成特定于数据库的代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-12
    • 2018-01-18
    • 1970-01-01
    • 2015-07-01
    • 2013-02-27
    • 1970-01-01
    相关资源
    最近更新 更多