Liquibase不执行SQL并返回Update Successful

时间:2017-01-24 13:27:13

标签: sql postgresql liquibase

我在我的电脑上创建了一个新的PostgreSQL数据库,

  CREATE DATABASE "Test_Liquibase_Versionin"
  WITH OWNER = postgres
       ENCODING = 'UTF8'
       TABLESPACE = pg_default
       LC_COLLATE = 'English_United States.1252'
       LC_CTYPE = 'English_United States.1252'
       CONNECTION LIMIT = -1;

下载liquibase-3.4.2-bin并运行此命令:

C:\LiquiBase\liquibase.bat --driver=org.postgresql.Driver --classpath="C:\LiquiBase\Driver\postgresql-9.4.1212.jar" --changeLogFile=C:\LiquiBase\changes\databaseChangeLog.sql --url="jdbc:postgresql://localhost:5432/Test_Liquibase_Versionin?user=test&password=Password" update

得到此回复Liquibase Update Successful

检查数据库并注意我有2个表databasechangelog, databasechangeloglock

将databaseChangeLog.sql更改为如下所示:

--liquibase formatted sql


create table employees( uuid int, name Varchar(10));
insert into employees values(1, 'Mr');
insert into employees values(2, 'Mail');
create table depts( dept_id int, dep_name Varchar(10));

再次执行C:\LiquiBase\liquibase.bat.........

得到此回复Liquibase Update Successful

登录到我的数据库 - 但没有按预期的新表。 可能是什么原因?我该怎么做来测试出错了什么?

2 个答案:

答案 0 :(得分:2)

您需要在脚本中添加更改集。

这是因为您告诉Liquibase您的sql脚本是Liquibase formatted sql。但由于你没有任何变更集,它什么也没做。

--liquibase formatted sql

--changeSet PeterH:Inserting-Values1 endDelimiter:; splitStatements:true stripComments:false runOnChange:false

create table employees( uuid int, name Varchar(10));
insert into employees values(1, 'Mr');
insert into employees values(2, 'Mail');
create table depts( dept_id int, dep_name Varchar(10));

答案 1 :(得分:1)

在我的情况下,我正在文件上设置liquibase标头,但是问题出在用户名(进行更改的用户)和参数之间存在空格:

SELECT * 
FROM #TEST2
PIVOT
(
    MAX(VAL)
    FOR COL IN ([100_VIEW_CNT],[100_ORDER_CNT],[100_ORDER_AMOUNT],[200_VIEW_CNT],[200_ORDER_CNT],[200_ORDER_AMOUNT])
) PV

如您所见,“ Jenkins:”和“ scriptname.sql”之间有一个空格。我已经删除了该空间,它可以正常运行