修复pgsql自动创建sql失败问题

This commit is contained in:
杨黄林
2026-01-14 17:45:36 +08:00
parent 8321032918
commit 64724de96c
5 changed files with 21 additions and 20 deletions

View File

@@ -7,10 +7,12 @@ import org.springframework.core.io.InputStreamResource;
import org.springframework.core.io.Resource; import org.springframework.core.io.Resource;
import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator; import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;
import org.springframework.jdbc.datasource.init.ScriptUtils;
import javax.sql.DataSource; import javax.sql.DataSource;
import java.io.*; import java.io.*;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.Objects;
public abstract class SequencesBase { public abstract class SequencesBase {
protected DbType dbType; protected DbType dbType;
@@ -61,6 +63,10 @@ public abstract class SequencesBase {
} }
InputStream inputStream = new ByteArrayInputStream(sql.getBytes(StandardCharsets.UTF_8)); InputStream inputStream = new ByteArrayInputStream(sql.getBytes(StandardCharsets.UTF_8));
ResourceDatabasePopulator databasePopulator = new ResourceDatabasePopulator(new InputStreamResource(inputStream)); ResourceDatabasePopulator databasePopulator = new ResourceDatabasePopulator(new InputStreamResource(inputStream));
if (Objects.equals(dbType.getSeries(), DbType.PostgreSQL.getSeries()) && fileName.endsWith("function.sql")) {
// 函数文件只能有一个函数,并且函数文件不要通过;分隔
databasePopulator.setSeparator(ScriptUtils.EOF_STATEMENT_SEPARATOR);
}
databasePopulator.execute(dataSource); databasePopulator.execute(dataSource);
} catch (IOException e) { } catch (IOException e) {
System.err.println("执行SQL文件" + fileName + "失败"); System.err.println("执行SQL文件" + fileName + "失败");

View File

@@ -7,6 +7,8 @@ import com.yanghuanglin.seq.po.Sequences;
import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.JdbcTemplate;
import java.util.Objects;
/** /**
* @author yanghuanglin * @author yanghuanglin
@@ -56,5 +58,9 @@ public class SequencesDaoImpl extends SequencesBase implements SequencesDao {
@Override @Override
public void createTable() { public void createTable() {
this.createTableByFile("create_table_sequences.sql"); this.createTableByFile("create_table_sequences.sql");
if (Objects.equals(dbType.getSeries(), DbType.PostgreSQL.getSeries())) {
this.createTableByFile("create_table_sequences_function.sql");
this.createTableByFile("create_table_sequences_trigger.sql");
}
} }
} }

View File

@@ -11,22 +11,3 @@ COMMENT ON COLUMN "sequences"."key" IS '序号英文名称';
COMMENT ON COLUMN "sequences"."type" IS '序号类型'; COMMENT ON COLUMN "sequences"."type" IS '序号类型';
COMMENT ON COLUMN "sequences"."seq" IS '已使用到的序号'; COMMENT ON COLUMN "sequences"."seq" IS '已使用到的序号';
COMMENT ON COLUMN "sequences"."update_time" IS '最后使用时间'; COMMENT ON COLUMN "sequences"."update_time" IS '最后使用时间';
/*
触发器函数用户更新update_time字段
*/
CREATE OR REPLACE FUNCTION SEQUENCES_UPDATE_TIME() RETURNS TRIGGER AS $$
BEGIN
NEW."update_time" := current_timestamp;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
/*
@触发器设置,功能:自动记录更新时间
@触发器名为 SEQUENCES_UPDATE_TIME
@触发器执行范围为每行生效
*/
DROP TRIGGER IF EXISTS SEQUENCES_UPDATE_TIME ON "sequences" CASCADE;
CREATE TRIGGER SEQUENCES_UPDATE_TIME BEFORE INSERT OR UPDATE ON "sequences" FOR EACH ROW EXECUTE PROCEDURE SEQUENCES_UPDATE_TIME();

View File

@@ -0,0 +1,6 @@
CREATE OR REPLACE FUNCTION SEQUENCES_UPDATE_TIME() RETURNS TRIGGER AS $$
BEGIN
NEW."update_time" := current_timestamp;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;

View File

@@ -0,0 +1,2 @@
DROP TRIGGER IF EXISTS SEQUENCES_UPDATE_TIME ON "sequences" CASCADE;
CREATE TRIGGER SEQUENCES_UPDATE_TIME BEFORE INSERT OR UPDATE ON "sequences" FOR EACH ROW EXECUTE PROCEDURE SEQUENCES_UPDATE_TIME();