nacos2.3.0實(shí)現(xiàn)接入pgsql或其他數(shù)據(jù)庫
首先嘗試使用官方插件進(jìn)行擴(kuò)展,各種報(bào)錯后放棄,不如自己修改源碼吧。
一、官方解決方案
- 1、nocos 文檔地址:Nacos 配置中心簡介, Nacos 是什么 | Nacos 官網(wǎng)
- 2、官方解答:nacos支持postgresql數(shù)據(jù)庫嗎 | Nacos 官網(wǎng)
- 3、源碼下載地址:Release 2.3.0 (Nov 30, 2023) · alibaba/nacos · GitHub
- 4、Nacos的數(shù)據(jù)庫插件倉庫:nacos-plugin/nacos-datasource-plugin-ext at develop · nacos-group/nacos-plugin · GitHub
按照官方的方案:
下載插件后,更改pom文件中nacos的版本,之后將插件打成jar包,放到nacos的plugins目錄下,更改配置,啟動后各種報(bào)錯找不到方法,遂放棄。
二、更改源碼
1、在項(xiàng)目根(nacos-all)下的pom.xml文件中添加如下依賴:
<postgresql.version>42.3.8</postgresql.version>
org.postgresql postgresql ${postgresql.version}2、在項(xiàng)目的nacos-config-plugin、nacos-persistence模塊的pom.xml文件中添加如下依賴:
org.postgresql postgresql
3、在項(xiàng)目的nacos-plugin模塊的nacos-datasource-plugin模塊com.alibaba.nacos.plugin.datasource.impl包下新建一個包,名為postgresql,拷貝同級包mysql下的所有文件到postgresql包下,修改類名和文件名為xxxByPostgresql,如圖:

4、將這幾個類中LIMIT ?,?的寫法為OFFSET ? LIMIT ? 如圖

5、在改項(xiàng)目resource目錄下,找到com.alibaba.nacos.plugin.datasource.mapper.Mapper文件,在后面追加:
com.alibaba.nacos.plugin.datasource.impl.postgresql.ConfigInfoAggrMapperByPostgresql com.alibaba.nacos.plugin.datasource.impl.postgresql.ConfigInfoBetaMapperByPostgresql com.alibaba.nacos.plugin.datasource.impl.postgresql.ConfigInfoMapperByPostgresql com.alibaba.nacos.plugin.datasource.impl.postgresql.ConfigInfoTagMapperByPostgresql com.alibaba.nacos.plugin.datasource.impl.postgresql.ConfigTagsRelationMapperByPostgresql com.alibaba.nacos.plugin.datasource.impl.postgresql.HistoryConfigInfoMapperByPostgresql com.alibaba.nacos.plugin.datasource.impl.postgresql.TenantInfoMapperByPostgresql com.alibaba.nacos.plugin.datasource.impl.postgresql.TenantCapacityMapperByPostgresql com.alibaba.nacos.plugin.datasource.impl.postgresql.GroupCapacityMapperByPostgresql
如圖:

6、在DataSourceConstant類中增加pgsql的常量
public static final String POSTGRESQL = "postgresql";
7、persistence模塊,修改PersistenceConstant
public static final String POSTGRESQL = "postgresql";
修改ExternalDataSourceProperties類


代碼如下,直接復(fù)制粘貼即可:
/*
* Copyright 1999-2023 Alibaba Group Holding Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alibaba.nacos.persistence.datasource;
import com.alibaba.nacos.common.utils.CollectionUtils;
import com.alibaba.nacos.common.utils.Preconditions;
import com.alibaba.nacos.common.utils.StringUtils;
import com.zaxxer.hikari.HikariDataSource;
import org.springframework.boot.context.properties.bind.Bindable;
import org.springframework.boot.context.properties.bind.Binder;
import org.springframework.core.env.Environment;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import static com.alibaba.nacos.common.utils.CollectionUtils.getOrDefault;
/**
* Properties of external DataSource.
*
* @author Nacos
*/
public class ExternalDataSourceProperties {
private static final String JDBC_DRIVER_NAME = "com.mysql.cj.jdbc.Driver";
private static final String TEST_QUERY = "SELECT 1";
private Integer num;
private List<String> url = new ArrayList<>();
private List<String> user = new ArrayList<>();
private List<String> password = new ArrayList<>();
private String jdbcDriverName;
public void setJdbcDriverName(String jdbcDriverName) {
if (StringUtils.isBlank(jdbcDriverName)) {
this.jdbcDriverName = JDBC_DRIVER_NAME;
} else {
this.jdbcDriverName = jdbcDriverName;
}
}
public void setNum(Integer num) {
this.num = num;
}
public void setUrl(List<String> url) {
this.url = url;
}
public void setUser(List<String> user) {
this.user = user;
}
public void setPassword(List<String> password) {
this.password = password;
}
/**
* Build serveral HikariDataSource.
*
* @param environment {@link Environment}
* @param callback Callback function when constructing data source
* @return List of {@link HikariDataSource}
*/
List<HikariDataSource> build(Environment environment, Callback<HikariDataSource> callback) {
List<HikariDataSource> dataSources = new ArrayList<>();
Binder.get(environment).bind("db", Bindable.ofInstance(this));
Preconditions.checkArgument(Objects.nonNull(num), "db.num is null");
Preconditions.checkArgument(CollectionUtils.isNotEmpty(user), "db.user or db.user.[index] is null");
Preconditions.checkArgument(CollectionUtils.isNotEmpty(password), "db.password or db.password.[index] is null");
for (int index = 0; index < num; index++) {
int currentSize = index + 1;
Preconditions.checkArgument(url.size() >= currentSize, "db.url.%s is null", index);
DataSourcePoolProperties poolProperties = DataSourcePoolProperties.build(environment);
if (StringUtils.isEmpty(poolProperties.getDataSource().getDriverClassName())) {
poolProperties.setDriverClassName(jdbcDriverName);
}
poolProperties.setJdbcUrl(url.get(index).trim());
poolProperties.setUsername(getOrDefault(user, index, user.get(0)).trim());
poolProperties.setPassword(getOrDefault(password, index, password.get(0)).trim());
HikariDataSource ds = poolProperties.getDataSource();
if (StringUtils.isEmpty(ds.getConnectionTestQuery())) {
ds.setConnectionTestQuery(TEST_QUERY);
}
dataSources.add(ds);
callback.accept(ds);
}
Preconditions.checkArgument(CollectionUtils.isNotEmpty(dataSources), "no datasource available");
return dataSources;
}
interface Callback<D> {
/**
* Perform custom logic.
*
* @param datasource dataSource.
*/
void accept(D datasource);
}
}
8、plugins-defualt-impl模塊,子模塊nacos-default-auth-plugin中,修改AuthPageConstant,加入以下代碼
public static final String OFFSET_LIMIT = "OFFSET ? LIMIT ?";
persistence.handler.support中新增PostgreSqlPageHandlerAdapter類,如圖:

代碼如下:
package com.alibaba.nacos.plugin.auth.impl.persistence.handler.support;
import com.alibaba.nacos.config.server.service.dump.DumpService;
import com.alibaba.nacos.persistence.constants.PersistenceConstant;
import com.alibaba.nacos.plugin.auth.impl.constant.AuthPageConstant;
import com.alibaba.nacos.plugin.auth.impl.model.OffsetFetchResult;
import com.alibaba.nacos.plugin.auth.impl.persistence.handler.PageHandlerAdapter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* @author w
*/
public class PostgreSqlPageHandlerAdapter implements PageHandlerAdapter {
@Override
public boolean supports(String dataSourceType) {
return PersistenceConstant.POSTGRESQL.equals(dataSourceType);
}
@Override
public OffsetFetchResult addOffsetAndFetchNext(String fetchSql, Object[] arg, int pageNo, int pageSize) {
if (!fetchSql.contains(AuthPageConstant.LIMIT)) {
fetchSql += " " + AuthPageConstant.OFFSET_LIMIT;
List<Object> newArgsList = new ArrayList<>(Arrays.asList(arg));
newArgsList.add((pageNo - 1) * pageSize);
newArgsList.add(pageSize);
Object[] newArgs = newArgsList.toArray(new Object[newArgsList.size()]);
return new OffsetFetchResult(fetchSql, newArgs);
}
return new OffsetFetchResult(fetchSql, arg);
}
}
在 PageHandlerAdapterFactory 類中加入以下代碼:

9、最終,執(zhí)行打包命令
mvn -Prelease-nacos clean install -Dmaven.test.skip=true -Dcheckstyle.skip=true -Dpmd.skip=true -Drat.skip=true -U
根據(jù)需求,在nacos-2.3.0distribution arget 目錄下找到打好的包

修改配置文件,記得將數(shù)據(jù)庫ip、庫名、schema名稱、用戶名、密碼配置改成自己的:
spring.datasource.platform=postgresql db.num=1 db.url.0=jdbc:postgresql://xxxx:5432/nacos?currentSchema=public&reWriteBatchedInserts=true&useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai db.user.0=xxxx db.password.0=xxxx db.pool.config.driverClassName=org.postgresql.Driver nacos.core.auth.plugin.nacos.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789 nacos.core.auth.enabled=true nacos.core.auth.caching.enabled=false nacos.core.auth.server.identity.key=nacos nacos.core.auth.server.identity.value=nacos
最終,祝大家成功?。?!
附上pg數(shù)據(jù)庫腳本:
/*
* Copyright 1999-2018 Alibaba Group Holding Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-- ----------------------------
-- Table structure for config_info
-- ----------------------------
DROP TABLE IF EXISTS "config_info";
CREATE TABLE "config_info" (
"id" bigserial NOT NULL,
"data_id" varchar(255) NOT NULL,
"group_id" varchar(255) ,
"content" text NOT NULL,
"md5" varchar(32) ,
"gmt_create" timestamp(6) NOT NULL,
"gmt_modified" timestamp(6) NOT NULL,
"src_user" text ,
"src_ip" varchar(20) ,
"app_name" varchar(128) ,
"tenant_id" varchar(128) ,
"c_desc" varchar(256) ,
"c_use" varchar(64) ,
"effect" varchar(64) ,
"type" varchar(64) ,
"c_schema" text ,
"encrypted_data_key" text NOT NULL
)
;
COMMENT ON COLUMN "config_info"."id" IS 'id';
COMMENT ON COLUMN "config_info"."data_id" IS 'data_id';
COMMENT ON COLUMN "config_info"."content" IS 'content';
COMMENT ON COLUMN "config_info"."md5" IS 'md5';
COMMENT ON COLUMN "config_info"."gmt_create" IS '創(chuàng)建時間';
COMMENT ON COLUMN "config_info"."gmt_modified" IS '修改時間';
COMMENT ON COLUMN "config_info"."src_user" IS 'source user';
COMMENT ON COLUMN "config_info"."src_ip" IS 'source ip';
COMMENT ON COLUMN "config_info"."tenant_id" IS '租戶字段';
COMMENT ON COLUMN "config_info"."encrypted_data_key" IS '秘鑰';
COMMENT ON TABLE "config_info" IS 'config_info';
-- ----------------------------
-- Table structure for config_info_aggr
-- ----------------------------
DROP TABLE IF EXISTS "config_info_aggr";
CREATE TABLE "config_info_aggr" (
"id" bigserial NOT NULL,
"data_id" varchar(255) NOT NULL,
"group_id" varchar(255) NOT NULL,
"datum_id" varchar(255) NOT NULL,
"content" text NOT NULL,
"gmt_modified" timestamp(6) NOT NULL,
"app_name" varchar(128) ,
"tenant_id" varchar(128)
)
;
COMMENT ON COLUMN "config_info_aggr"."id" IS 'id';
COMMENT ON COLUMN "config_info_aggr"."data_id" IS 'data_id';
COMMENT ON COLUMN "config_info_aggr"."group_id" IS 'group_id';
COMMENT ON COLUMN "config_info_aggr"."datum_id" IS 'datum_id';
COMMENT ON COLUMN "config_info_aggr"."content" IS '內(nèi)容';
COMMENT ON COLUMN "config_info_aggr"."gmt_modified" IS '修改時間';
COMMENT ON COLUMN "config_info_aggr"."tenant_id" IS '租戶字段';
COMMENT ON TABLE "config_info_aggr" IS '增加租戶字段';
-- ----------------------------
-- Records of config_info_aggr
-- ----------------------------
BEGIN;
COMMIT;
-- ----------------------------
-- Table structure for config_info_beta
-- ----------------------------
DROP TABLE IF EXISTS "config_info_beta";
CREATE TABLE "config_info_beta" (
"id" bigserial NOT NULL,
"data_id" varchar(255) NOT NULL,
"group_id" varchar(128) NOT NULL,
"app_name" varchar(128) ,
"content" text NOT NULL,
"beta_ips" varchar(1024) ,
"md5" varchar(32) ,
"gmt_create" timestamp(6) NOT NULL,
"gmt_modified" timestamp(6) NOT NULL,
"src_user" text ,
"src_ip" varchar(20) ,
"tenant_id" varchar(128) ,
"encrypted_data_key" text NOT NULL
)
;
COMMENT ON COLUMN "config_info_beta"."id" IS 'id';
COMMENT ON COLUMN "config_info_beta"."data_id" IS 'data_id';
COMMENT ON COLUMN "config_info_beta"."group_id" IS 'group_id';
COMMENT ON COLUMN "config_info_beta"."app_name" IS 'app_name';
COMMENT ON COLUMN "config_info_beta"."content" IS 'content';
COMMENT ON COLUMN "config_info_beta"."beta_ips" IS 'betaIps';
COMMENT ON COLUMN "config_info_beta"."md5" IS 'md5';
COMMENT ON COLUMN "config_info_beta"."gmt_create" IS '創(chuàng)建時間';
COMMENT ON COLUMN "config_info_beta"."gmt_modified" IS '修改時間';
COMMENT ON COLUMN "config_info_beta"."src_user" IS 'source user';
COMMENT ON COLUMN "config_info_beta"."src_ip" IS 'source ip';
COMMENT ON COLUMN "config_info_beta"."tenant_id" IS '租戶字段';
COMMENT ON COLUMN "config_info_beta"."encrypted_data_key" IS '秘鑰';
COMMENT ON TABLE "config_info_beta" IS 'config_info_beta';
-- ----------------------------
-- Records of config_info_beta
-- ----------------------------
BEGIN;
COMMIT;
-- ----------------------------
-- Table structure for config_info_tag
-- ----------------------------
DROP TABLE IF EXISTS "config_info_tag";
CREATE TABLE "config_info_tag" (
"id" bigserial NOT NULL,
"data_id" varchar(255) NOT NULL,
"group_id" varchar(128) NOT NULL,
"tenant_id" varchar(128) ,
"tag_id" varchar(128) NOT NULL,
"app_name" varchar(128) ,
"content" text NOT NULL,
"md5" varchar(32) ,
"gmt_create" timestamp(6) NOT NULL,
"gmt_modified" timestamp(6) NOT NULL,
"src_user" text ,
"src_ip" varchar(20)
)
;
COMMENT ON COLUMN "config_info_tag"."id" IS 'id';
COMMENT ON COLUMN "config_info_tag"."data_id" IS 'data_id';
COMMENT ON COLUMN "config_info_tag"."group_id" IS 'group_id';
COMMENT ON COLUMN "config_info_tag"."tenant_id" IS 'tenant_id';
COMMENT ON COLUMN "config_info_tag"."tag_id" IS 'tag_id';
COMMENT ON COLUMN "config_info_tag"."app_name" IS 'app_name';
COMMENT ON COLUMN "config_info_tag"."content" IS 'content';
COMMENT ON COLUMN "config_info_tag"."md5" IS 'md5';
COMMENT ON COLUMN "config_info_tag"."gmt_create" IS '創(chuàng)建時間';
COMMENT ON COLUMN "config_info_tag"."gmt_modified" IS '修改時間';
COMMENT ON COLUMN "config_info_tag"."src_user" IS 'source user';
COMMENT ON COLUMN "config_info_tag"."src_ip" IS 'source ip';
COMMENT ON TABLE "config_info_tag" IS 'config_info_tag';
-- ----------------------------
-- Records of config_info_tag
-- ----------------------------
BEGIN;
COMMIT;
-- ----------------------------
-- Table structure for config_tags_relation
-- ----------------------------
DROP TABLE IF EXISTS "config_tags_relation";
CREATE TABLE "config_tags_relation" (
"id" bigserial NOT NULL,
"tag_name" varchar(128) NOT NULL,
"tag_type" varchar(64) ,
"data_id" varchar(255) NOT NULL,
"group_id" varchar(128) NOT NULL,
"tenant_id" varchar(128) ,
"nid" bigserial NOT NULL
)
;
COMMENT ON COLUMN "config_tags_relation"."id" IS 'id';
COMMENT ON COLUMN "config_tags_relation"."tag_name" IS 'tag_name';
COMMENT ON COLUMN "config_tags_relation"."tag_type" IS 'tag_type';
COMMENT ON COLUMN "config_tags_relation"."data_id" IS 'data_id';
COMMENT ON COLUMN "config_tags_relation"."group_id" IS 'group_id';
COMMENT ON COLUMN "config_tags_relation"."tenant_id" IS 'tenant_id';
COMMENT ON TABLE "config_tags_relation" IS 'config_tag_relation';
-- ----------------------------
-- Records of config_tags_relation
-- ----------------------------
BEGIN;
COMMIT;
-- ----------------------------
-- Table structure for group_capacity
-- ----------------------------
DROP TABLE IF EXISTS "group_capacity";
CREATE TABLE "group_capacity" (
"id" bigserial NOT NULL,
"group_id" varchar(128) NOT NULL,
"quota" int4 NOT NULL,
"usage" int4 NOT NULL,
"max_size" int4 NOT NULL,
"max_aggr_count" int4 NOT NULL,
"max_aggr_size" int4 NOT NULL,
"max_history_count" int4 NOT NULL,
"gmt_create" timestamp(6) NOT NULL,
"gmt_modified" timestamp(6) NOT NULL
)
;
COMMENT ON COLUMN "group_capacity"."id" IS '主鍵ID';
COMMENT ON COLUMN "group_capacity"."group_id" IS 'Group ID,空字符表示整個集群';
COMMENT ON COLUMN "group_capacity"."quota" IS '配額,0表示使用默認(rèn)值';
COMMENT ON COLUMN "group_capacity"."usage" IS '使用量';
COMMENT ON COLUMN "group_capacity"."max_size" IS '單個配置大小上限,單位為字節(jié),0表示使用默認(rèn)值';
COMMENT ON COLUMN "group_capacity"."max_aggr_count" IS '聚合子配置最大個數(shù),,0表示使用默認(rèn)值';
COMMENT ON COLUMN "group_capacity"."max_aggr_size" IS '單個聚合數(shù)據(jù)的子配置大小上限,單位為字節(jié),0表示使用默認(rèn)值';
COMMENT ON COLUMN "group_capacity"."max_history_count" IS '最大變更歷史數(shù)量';
COMMENT ON COLUMN "group_capacity"."gmt_create" IS '創(chuàng)建時間';
COMMENT ON COLUMN "group_capacity"."gmt_modified" IS '修改時間';
COMMENT ON TABLE "group_capacity" IS '集群、各Group容量信息表';
-- ----------------------------
-- Records of group_capacity
-- ----------------------------
BEGIN;
COMMIT;
-- ----------------------------
-- Table structure for his_config_info
-- ----------------------------
DROP TABLE IF EXISTS "his_config_info";
CREATE TABLE "his_config_info" (
"id" int8 NOT NULL,
"nid" bigserial NOT NULL,
"data_id" varchar(255) NOT NULL,
"group_id" varchar(128) NOT NULL,
"app_name" varchar(128) ,
"content" text NOT NULL,
"md5" varchar(32) ,
"gmt_create" timestamp(6) NOT NULL DEFAULT '2010-05-05 00:00:00',
"gmt_modified" timestamp(6) NOT NULL,
"src_user" text ,
"src_ip" varchar(20) ,
"op_type" char(10) ,
"tenant_id" varchar(128) ,
"encrypted_data_key" text NOT NULL
)
;
COMMENT ON COLUMN "his_config_info"."app_name" IS 'app_name';
COMMENT ON COLUMN "his_config_info"."tenant_id" IS '租戶字段';
COMMENT ON COLUMN "his_config_info"."encrypted_data_key" IS '秘鑰';
COMMENT ON TABLE "his_config_info" IS '多租戶改造';
-- ----------------------------
-- Table structure for permissions
-- ----------------------------
DROP TABLE IF EXISTS "permissions";
CREATE TABLE "permissions" (
"role" varchar(50) NOT NULL,
"resource" varchar(512) NOT NULL,
"action" varchar(8) NOT NULL
)
;
-- ----------------------------
-- Records of permissions
-- ----------------------------
BEGIN;
COMMIT;
-- ----------------------------
-- Table structure for roles
-- ----------------------------
DROP TABLE IF EXISTS "roles";
CREATE TABLE "roles" (
"username" varchar(50) NOT NULL,
"role" varchar(50) NOT NULL
)
;
-- ----------------------------
-- Records of roles
-- ----------------------------
BEGIN;
INSERT INTO "roles" VALUES ('nacos', 'ROLE_ADMIN');
COMMIT;
-- ----------------------------
-- Table structure for tenant_capacity
-- ----------------------------
DROP TABLE IF EXISTS "tenant_capacity";
CREATE TABLE "tenant_capacity" (
"id" bigserial NOT NULL,
"tenant_id" varchar(128) NOT NULL,
"quota" int4 NOT NULL,
"usage" int4 NOT NULL,
"max_size" int4 NOT NULL,
"max_aggr_count" int4 NOT NULL,
"max_aggr_size" int4 NOT NULL,
"max_history_count" int4 NOT NULL,
"gmt_create" timestamp(6) NOT NULL,
"gmt_modified" timestamp(6) NOT NULL
)
;
COMMENT ON COLUMN "tenant_capacity"."id" IS '主鍵ID';
COMMENT ON COLUMN "tenant_capacity"."tenant_id" IS 'Tenant ID';
COMMENT ON COLUMN "tenant_capacity"."quota" IS '配額,0表示使用默認(rèn)值';
COMMENT ON COLUMN "tenant_capacity"."usage" IS '使用量';
COMMENT ON COLUMN "tenant_capacity"."max_size" IS '單個配置大小上限,單位為字節(jié),0表示使用默認(rèn)值';
COMMENT ON COLUMN "tenant_capacity"."max_aggr_count" IS '聚合子配置最大個數(shù)';
COMMENT ON COLUMN "tenant_capacity"."max_aggr_size" IS '單個聚合數(shù)據(jù)的子配置大小上限,單位為字節(jié),0表示使用默認(rèn)值';
COMMENT ON COLUMN "tenant_capacity"."max_history_count" IS '最大變更歷史數(shù)量';
COMMENT ON COLUMN "tenant_capacity"."gmt_create" IS '創(chuàng)建時間';
COMMENT ON COLUMN "tenant_capacity"."gmt_modified" IS '修改時間';
COMMENT ON TABLE "tenant_capacity" IS '租戶容量信息表';
-- ----------------------------
-- Records of tenant_capacity
-- ----------------------------
BEGIN;
COMMIT;
-- ----------------------------
-- Table structure for tenant_info
-- ----------------------------
DROP TABLE IF EXISTS "tenant_info";
CREATE TABLE "tenant_info" (
"id" bigserial NOT NULL,
"kp" varchar(128) NOT NULL,
"tenant_id" varchar(128) ,
"tenant_name" varchar(128) ,
"tenant_desc" varchar(256) ,
"create_source" varchar(32) ,
"gmt_create" int8 NOT NULL,
"gmt_modified" int8 NOT NULL
)
;
COMMENT ON COLUMN "tenant_info"."id" IS 'id';
COMMENT ON COLUMN "tenant_info"."kp" IS 'kp';
COMMENT ON COLUMN "tenant_info"."tenant_id" IS 'tenant_id';
COMMENT ON COLUMN "tenant_info"."tenant_name" IS 'tenant_name';
COMMENT ON COLUMN "tenant_info"."tenant_desc" IS 'tenant_desc';
COMMENT ON COLUMN "tenant_info"."create_source" IS 'create_source';
COMMENT ON COLUMN "tenant_info"."gmt_create" IS '創(chuàng)建時間';
COMMENT ON COLUMN "tenant_info"."gmt_modified" IS '修改時間';
COMMENT ON TABLE "tenant_info" IS 'tenant_info';
-- ----------------------------
-- Records of tenant_info
-- ----------------------------
BEGIN;
COMMIT;
-- ----------------------------
-- Table structure for users
-- ----------------------------
DROP TABLE IF EXISTS "users";
CREATE TABLE "users" (
"username" varchar(50) NOT NULL,
"password" varchar(500) NOT NULL,
"enabled" boolean NOT NULL
)
;
-- ----------------------------
-- Records of users
-- ----------------------------
BEGIN;
INSERT INTO "users" VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);
COMMIT;
-- ----------------------------
-- Indexes structure for table config_info
-- ----------------------------
CREATE UNIQUE INDEX "uk_configinfo_datagrouptenant" ON "config_info" ("data_id","group_id","tenant_id");
-- ----------------------------
-- Primary Key structure for table config_info
-- ----------------------------
ALTER TABLE "config_info" ADD CONSTRAINT "config_info_pkey" PRIMARY KEY ("id");
-- ----------------------------
-- Indexes structure for table config_info_aggr
-- ----------------------------
CREATE UNIQUE INDEX "uk_configinfoaggr_datagrouptenantdatum" ON "config_info_aggr" USING btree ("data_id","group_id","tenant_id","datum_id");
-- ----------------------------
-- Primary Key structure for table config_info_aggr
-- ----------------------------
ALTER TABLE "config_info_aggr" ADD CONSTRAINT "config_info_aggr_pkey" PRIMARY KEY ("id");
-- ----------------------------
-- Indexes structure for table config_info_beta
-- ----------------------------
CREATE UNIQUE INDEX "uk_configinfobeta_datagrouptenant" ON "config_info_beta" USING btree ("data_id","group_id","tenant_id");
-- ----------------------------
-- Primary Key structure for table config_info_beta
-- ----------------------------
ALTER TABLE "config_info_beta" ADD CONSTRAINT "config_info_beta_pkey" PRIMARY KEY ("id");
-- ----------------------------
-- Indexes structure for table config_info_tag
-- ----------------------------
CREATE UNIQUE INDEX "uk_configinfotag_datagrouptenanttag" ON "config_info_tag" USING btree ("data_id","group_id","tenant_id","tag_id");
-- ----------------------------
-- Primary Key structure for table config_info_tag
-- ----------------------------
ALTER TABLE "config_info_tag" ADD CONSTRAINT "config_info_tag_pkey" PRIMARY KEY ("id");
-- ----------------------------
-- Indexes structure for table config_tags_relation
-- ----------------------------
CREATE INDEX "idx_tenant_id" ON "config_tags_relation" USING btree (
"tenant_id"
);
CREATE UNIQUE INDEX "uk_configtagrelation_configidtag" ON "config_tags_relation" USING btree (
"id",
"tag_name",
"tag_type"
);
-- ----------------------------
-- Primary Key structure for table config_tags_relation
-- ----------------------------
ALTER TABLE "config_tags_relation" ADD CONSTRAINT "config_tags_relation_pkey" PRIMARY KEY ("nid");
-- ----------------------------
-- Indexes structure for table group_capacity
-- ----------------------------
CREATE UNIQUE INDEX "uk_group_id" ON "group_capacity" USING btree (
"group_id"
);
-- ----------------------------
-- Primary Key structure for table group_capacity
-- ----------------------------
ALTER TABLE "group_capacity" ADD CONSTRAINT "group_capacity_pkey" PRIMARY KEY ("id");
-- ----------------------------
-- Indexes structure for table his_config_info
-- ----------------------------
CREATE INDEX "idx_did" ON "his_config_info" USING btree (
"data_id"
);
CREATE INDEX "idx_gmt_create" ON "his_config_info" USING btree (
"gmt_create"
);
CREATE INDEX "idx_gmt_modified" ON "his_config_info" USING btree (
"gmt_modified"
);
-- ----------------------------
-- Primary Key structure for table his_config_info
-- ----------------------------
ALTER TABLE "his_config_info" ADD CONSTRAINT "his_config_info_pkey" PRIMARY KEY ("nid");
-- ----------------------------
-- Indexes structure for table permissions
-- ----------------------------
CREATE UNIQUE INDEX "uk_role_permission" ON "permissions" USING btree (
"role",
"resource",
"action"
);
-- ----------------------------
-- Indexes structure for table roles
-- ----------------------------
CREATE UNIQUE INDEX "uk_username_role" ON "roles" USING btree (
"username",
"role"
);
-- ----------------------------
-- Indexes structure for table tenant_capacity
-- ----------------------------
CREATE UNIQUE INDEX "uk_tenant_id" ON "tenant_capacity" USING btree (
"tenant_id"
);
-- ----------------------------
-- Primary Key structure for table tenant_capacity
-- ----------------------------
ALTER TABLE "tenant_capacity" ADD CONSTRAINT "tenant_capacity_pkey" PRIMARY KEY ("id");
-- ----------------------------
-- Indexes structure for table tenant_info
-- ----------------------------
CREATE UNIQUE INDEX "uk_tenant_info_kptenantid" ON "tenant_info" USING btree (
"kp",
"tenant_id"
);
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java 多層嵌套JSON類型數(shù)據(jù)全面解析
這篇文章主要介紹了Java 多層嵌套JSON類型數(shù)據(jù)全面解析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01
Java使用freemarker實(shí)現(xiàn)word下載方式
文章介紹了如何使用FreeMarker實(shí)現(xiàn)Word文件下載,包括引用依賴、創(chuàng)建Word模板、將Word文件存為XML格式、更改后綴為FTL模板、處理圖片和代碼實(shí)現(xiàn)2025-02-02
Jpa 如何使用@EntityListeners 實(shí)現(xiàn)實(shí)體對象的自動賦值
這篇文章主要介紹了Jpa 如何使用@EntityListeners 實(shí)現(xiàn)實(shí)體對象的自動賦值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08
詳解Java的MyBatis框架中的緩存與緩存的使用改進(jìn)
很多人在使用MyBatis的緩存后經(jīng)常會遇到MySQL分頁查詢的顯示問題,針對于此,這里我們就來詳解Java的MyBatis框架中的緩存與緩存的使用改進(jìn),首先來回顧一下MyBatis的緩存機(jī)制與執(zhí)行:2016-06-06
Spring Cloud Feign請求添加headers的實(shí)現(xiàn)方式
這篇文章主要介紹了Spring Cloud Feign請求添加headers的實(shí)現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04

