Liqubase PostgreSQL创建函数 [英] liquibase postgresql creating functions

查看:25
本文介绍了Liqubase PostgreSQL创建函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用Liqubase为postgressql数据库创建触发器。以下是我在Liquid Base中使用的语法

<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
         http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd">

    <changeSet id="1" author="yc14ik1">

        <createProcedure catalogName="cat" dbms="postgresql"
            encoding="utf8" procedureName="UPDATE_LAST_ROW_CHG_TS()" relativeToChangelogFile="true" schemaName="sub">

            CREATE OR REPLACE FUNCTION UPDATE_LAST_ROW_CHG_TS() RETURNS trigger
            LANGUAGE plpgsql
            AS $$
            BEGIN
                NEW.LAST_ROW_CHG_TS = NOW();
                RETURN NEW;
            END;
            $$;

        </createProcedure>


        <sql></sql>
</changeSet>

在Jenkins作业中执行此过程时,我收到此错误

Unexpected error running Liquibase: ERROR: language "plpgsql" does not exist
  Hint: Use CREATE LANGUAGE to load the language into the database. [Failed SQL: CREATE OR REPLACE FUNCTION UPDATE_LAST_ROW_CHG_TS() RETURNS trigger
            LANGUAGE plpgsql
            AS $$
            BEGIN
                NEW.LAST_ROW_CHG_TS = NOW();
                RETURN NEW;
            END;
            $$;]


Build step 'Execute shell' marked build as failure
Notifying upstream projects of job completion
Warning: you have no plugins providing access control for builds, so falling back to legacy behavior of permitting any downstream builds to be triggered

有人能帮助我吗?我如何解决此问题?

推荐答案

我的设置不同,它工作正常。

<databaseChangeLog
        xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd
        http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd">
        <changeSet author="l" id="UPDATE_LAST_ROW_CHG_TS" runOnChange="true">
                <createProcedure catalogName="UPDATE_LAST_ROW_CHG_TS"
                        dbms="postgresql"
                        encoding="utf8"
                        path="../files/UPDATE_LAST_ROW_CHG_TS.sql"
                        procedureName="UPDATE_LAST_ROW_CHG_TS"
                        relativeToChangelogFile="true"
                        schemaName="public"></createProcedure>
        </changeSet>
</databaseChangeLog>

从那里,您将所有的SQL放入一个在Path属性中引用的.sql文件中。

我不知道你的方法会不会奏效,但对我来说,你在底部有空标签似乎很奇怪。也许您的意思是让它们包装您的SQL函数?

我知道,如果配置并运行正确,上面的示例将会正常工作。

这篇关于Liqubase PostgreSQL创建函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆