This commit is contained in:
2025-08-29 12:36:30 +08:00
commit e772719844
8 changed files with 721 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
.idea

31
MySQL/life/life.sql Normal file
View File

@@ -0,0 +1,31 @@
create database fortern_life;
use fortern_life;
-- leaves_history table
create table leaves_history
(
id int auto_increment
primary key,
title varchar(50) not null comment 'Title',
description text not null comment 'Description'
) comment 'Historical events';
-- leaves_history_item table
create table leaves_history_item
(
id int auto_increment
primary key,
qq_no bigint not null comment 'QQ number',
qq_group_no int default 0 not null comment 'QQ group number',
time_of_occurrence timestamp not null comment 'Time of occurrence',
info varchar(1024) not null comment 'Description',
history_id int not null comment 'History table id',
index leaves_history_item_history_id_index (history_id),
index leaves_history_item_qq_group_no_index (qq_group_no),
index leaves_history_item_qq_no_index (qq_no),
index leaves_history_item_time_of_occurrence_index(time_of_occurrence),
constraint leaves_history_item_leaves_history_id_fk
foreign key (history_id) references leaves_history (id)
on update cascade
);

23
MySQL/person/person.sql Normal file
View File

@@ -0,0 +1,23 @@
-- 描述一个人的身份证号和其他个人信息
create table person
(
id int not null auto_increment,
address1 tinyint not null comment 'address1',
address2 tinyint not null comment 'address2',
address3 tinyint not null comment 'address3',
birthday date not null comment 'birthday',
sequence_number tinyint not null comment 'sequence number',
gender_code tinyint not null comment 'gender code',
check_code tinyint not null comment 'check code',
gender bit not null comment 'gender',
name varchar(20) not null comment 'name',
name_initials varchar(50) not null comment 'name initials',
address varchar(150) not null comment 'full address text',
phone_number varchar(50) null comment 'phone number',
update_time timestamp not null,
primary key (id),
unique index person_id_code_index (address1, address2, address3, birthday, sequence_number, gender_code),
index person_birthday_index (birthday),
index person_gender_index (gender),
index person_name_initials_index (name_initials)
) engine = InnoDB;

294
MySQL/qqnt/qqnt.sql Normal file
View File

@@ -0,0 +1,294 @@
create database fortern_qqnt;
-- https://docs.aaqwq.top/view/db_file_analysis/nt_msg.db.html
-- group_msg_table
create table fortern_qqnt.group_msg_table
(
-- 40001 消息ID具有唯一性
id bigint not null
primary key,
-- 40002 消息随机值,用于对消息去重
msg_random bigint not null,
-- 40003 群聊消息ID在每个聊天中依次递增
msg_seq integer not null,
-- 40010 聊天类型私聊为1群聊为2频道为4公众号为103企业客服为102临时会话为100
chat_type integer not null,
-- 40011 消息类型,详见下表
msg_type integer not null,
-- 40012 pb消息类型详见下表
sub_msg_type integer not null,
-- 40013 发送标志本机发送的消息为1其他客户端发送的为2别人发的消息为0 转发消息为5在已退出或被封禁的消息中为当日整点时间戳
send_type integer not null,
-- 40020 nt_uid, 对应 nt_uid_mapping_table
sender_uid varchar(200) not null,
-- 40026 未知
q40026 integer,
-- 40021 会话ID
peer_uid varchar(200) not null,
-- 40027 会话ID
peer_uin bigint not null,
-- 40040 未知
q40040 integer,
-- 40041 发送状态2为成功0为发送被阻止如不是对方好友1为尚未发送成功比如网络问题3为消息被和谐
send_status integer not null,
-- 40050 发送消息时的时间戳(精确到秒)
msg_time integer not null,
-- 40052 未知
q40052 integer,
-- 40090 发送者群名片,旧版 QQ 迁移数据中格式为 name(12345) 或 name<i@example.com> QQNT 中为群名片
send_member_name varchar(200),
-- 40093 发送者昵称,旧版 QQ 此字段为空QQNT 中未设置群名片时才有此字段
send_nick_name varchar(200) not null,
-- 40800 聊天消息,最为复杂
msg_content mediumblob,
-- 40900 不同情况下存在不一样的数据以列40011为区分。 值为8时列40900存贮转发聊天的缓存值为9时列40900存贮引用的消息
msg_quote mediumblob,
-- 40105 未知
q40105 integer,
-- 40005 只知道自己发的消息一定概率存在数值正常情况为0
q40005 integer,
-- 40058 当日 0 时整的时间戳格式,精确到秒,时区为 UTC+08:00
midnight_timestamp integer not null,
-- 40006 未知
elem_id bigint not null,
-- 40100 @状态
at_status integer,
-- 40600 十六进制。值为 14 00 时,为回复消息,为 6 代表有人回复自己为2代表他人回复他人值为c2e91304a8d114****时(不唯一),为撤回消息
msg_status blob,
-- 40060 已退出或已解散的群聊标志
disband_flag integer,
-- 40850 该消息所回复的消息的序号,默认为 0 或 NULL
reply_to bigint,
-- 40851 未知,默认为 0
q40851 integer,
-- 40601 未知,默认为 NULL
q40601 blob,
-- 40801 未知,默认为 NULL
q40801 blob,
-- 40605 未知,默认为 NULL
q40605 blob,
-- 40030 群号
group_no bigint not null,
-- 40033 消息发送者QQ号
qq_no bigint not null,
-- 40062 存贮详细表态信息(包括表态表情和表态数量),其数字与 QQBOT 中表情编号对应(超级表情不在此列表中)
emoji blob,
-- 40083 表态表情数量总和?
emoji_num integer,
-- 40084 表态表情数量总和?
emoji_num_2 integer not null,
-- 发送者QQ号索引
index qq_no_index (qq_no),
-- 群号与QQ号联合索引
index group_no_index (group_no, qq_no),
-- 时间索引
index msg_time_index (msg_time),
-- 群号与时间的联合索引
index group_msg_time_index (group_no, msg_time),
-- 群号与消息类型的联合索引
index group_msg_type_index (group_no, msg_type, sub_msg_type)
);
-- 40011 msg_type 消息类型
-- 无消息消息损坏多见于已退出群聊且时间久远0
-- 消息空白msgid存在应该是没加载出来1
-- text文本消息2
-- 群文件3
-- 我的聊天记录里没有4~大佬带带>︿<
-- 系统灰字消息5
-- 语音消息6
-- 视频文件7
-- 合并转发消息8
-- 回复类型消息9
-- 红包10
-- 应用消息11
-- 40012 sub_msg_type 区分pb消息类型
-- 非常规text消息0
-- 普通文本消息1
-- 群文件其他类型消息1
-- 图片消息2
-- 群文件图片消息2
-- 群公告3
-- 群文件视频消息4
-- 撤回消息提醒4
-- 群文件音频消息8
-- 原创表情包8
-- 射精消息11
-- 拍一拍消息12
-- 群文件docx消息16
-- 平台文本消息32
-- 群文件pptx消息32
-- 回复类型消息33
-- 群文件xlsx消息64
-- 存在链接161
-- 群文件zip消息512
-- 群文件exe消息2048
-- 表情消息4096
-- msg_type(40011) 与 sub_msg_type(40012) 组合可判断消息类型
-- 由于优先级问题特别是2类别的信息部分消息不满足以下规则
-- 空消息00
-- 已撤回消息10
-- 普通文本类消息21
-- 图片消息22
-- 只带图片的纯文本消息23
-- 纯表情消息216
-- 带表情的纯文本消息217
-- 带图片带表情的纯文本消息219
-- 纯链接消息2129
-- 带表情链接消息2145
-- 机器人消息2577
-- 机器人Markdown消息265
-- @消息235
-- 回复引用消息不带表情233
-- 回复引用消息带表情249
-- 收藏表情22
-- 收藏表情包24096
-- 群文件其他类型消息31
-- 群文件图片pngjpg消息32
-- 群文件视频消息34
-- 群文件音频mp3flac消息38
-- 群文件docx消息316
-- 群文件pptx消息332
-- 群文件xlsx消息364
-- 群文件zip消息3512
-- 群文件exe消息32048
-- 拍一拍消息512
-- 撤回消息提醒54
-- amr语音文件消息60
-- 视频文件消息70
-- 合并转发消息80
-- 回复消息933
-- 回复带图片消息(无@934
-- 回复带图片消息(有@935
-- 回复带图片带@935
-- 回复卡片引用消息949
-- 带表情回复949
-- 带表情带图片带@951
-- 回复存在链接的消息9161
-- 红包100
-- 应用消息如小程序110
-- 群公告113
-- 表情包178
-- 原创表情178
-- c2c_msg_table
create table fortern_qqnt.c2c_msg_table
(
-- 40001 消息ID具有唯一性
id bigint not null
primary key,
-- 40002 消息随机值,用于对消息去重
msg_random bigint not null,
-- 40003 位置
q40003 integer not null,
-- 40010 聊天类型私聊为1群聊为2频道为4公众号为103企业客服为102临时会话为100
chat_type integer not null,
-- 40011 消息类型,详见上表
msg_type integer not null,
-- 40012 pb消息类型详见上表
sub_msg_type integer not null,
-- 40013 发送标志,可能?
send_type integer not null,
-- 40020 未知
q40020 varchar(200) not null,
-- 40026 未知
q40026 integer not null,
-- 40021 未知
q40021 varchar(200) not null,
-- 40027 未知
q40027 integer not null,
-- 40040 未知
q40040 integer not null,
-- 40041 未知
q40041 integer not null,
-- 40050 发送消息时的时间戳(精确到秒)
msg_time integer not null,
-- 40052 未知
q40052 integer not null,
-- 40090 未知
q40090 text,
-- 40093 消息发送者的 QQ 昵称或是备注名
q40093 varchar(200) not null,
-- 40080 消息内容
q40800 mediumblob,
-- 40900 未知
q40900 mediumblob,
-- 40105 未知
q40105 integer not null,
-- 40005 未知
q40005 integer not null,
-- 40058 当日 0 时整的时间戳格式,精确到秒,时区为 UTC+08:00
midnight_timestamp integer not null,
-- 40006 未知
q40006 bigint not null,
-- 40010 未知
q40100 integer not null,
-- 40600 未知
q40600 mediumblob,
-- 40060 未知
q40060 integer not null,
-- 40850 未知
q40850 integer not null,
-- 40851 未知
q40851 integer not null,
-- 40601 未知
q40601 mediumblob,
-- 40801 未知
q40801 mediumblob,
-- 40605 未知
q40605 mediumblob,
-- 40030 对方 QQ 号(无论是对方还是自己发送的消息)
peer_qq_no bigint not null,
-- 40033 发送者的 QQ 号
sender_qq_no bigint not null,
-- 40062 未知
q40062 mediumblob,
-- 40083 未知
q40083 integer not null,
-- 40084 未知
q40084 integer not null,
-- 时间索引
index msg_time_index (msg_time),
-- 私聊者 QQ 号与时间的索引
index qq_no_msg_time_index (peer_qq_no, msg_time)
);
-- group_msg_fts
create table fortern_qqnt.group_msg_fts
(
-- 主键id
id bigint primary key,
-- 消息内容
msg_text mediumtext,
-- 文件名
file_name varchar(250),
-- 41703 未知
q41703 varchar(50),
-- 41704 未知
q41704 varchar(50),
-- 41705 未知
q41705 varchar(50),
-- 41706 未知
q41706 varchar(50),
-- 41707 未知
q41707 varchar(50),
-- 41701 group_msg_table的id的外键
msg_id bigint unique,
-- 40050 发送消息时的时间戳(精确到秒)
msg_time integer not null,
-- 40003 群聊消息ID在每个聊天中依次递增
msg_seq integer not null,
-- 40010 聊天类型私聊为1群聊为2频道为4公众号为103企业客服为102临时会话为100
chat_type integer not null,
-- 40021 会话ID
peer_uid varchar(200) not null,
-- 40027 会话ID
peer_uin bigint not null,
-- 40020 nt_uid, 对应 nt_uid_mapping_table
sender_uid varchar(200) not null,
-- 时间索引
index msg_time_index (msg_time),
-- 群号与时间的联合索引
index group_msg_time_index (peer_uin, msg_time)
);

3
PostgreSQL/fortern.sql Normal file
View File

@@ -0,0 +1,3 @@
-- create database
create database fortern with owner postgres;
comment on database fortern is 'Fortern的数据';

38
PostgreSQL/life/life.sql Normal file
View File

@@ -0,0 +1,38 @@
create schema life;
comment on schema life is 'Fortern的朋友与记事';
-- leaves_history table
create table life.leaves_history
(
id serial not null
constraint history_pk primary key,
title varchar(50) not null,
description text not null
);
comment on table life.leaves_history is 'Historical events';
comment on column life.leaves_history.title is 'Title';
comment on column life.leaves_history.description is 'Description';
-- leaves_history_item table
create table life.leaves_history_item
(
id serial not null
constraint leaves_history_item_pk
primary key,
qq_no bigint not null,
qq_group_no integer default 0 not null,
time_of_occurrence timestamp not null,
info varchar(1024),
history_id integer not null
constraint leaves_history_item_history_id_fk
references life.leaves_history
on update cascade on delete restrict
);
comment on column life.leaves_history_item.qq_no is 'QQ number';
comment on column life.leaves_history_item.qq_group_no is 'QQ group number';
comment on column life.leaves_history_item.info is 'Description';
comment on column life.leaves_history_item.history_id is 'History table id';
create index leaves_history_item_history_id_index on life.leaves_history_item (history_id);
create index leaves_history_item_qq_group_no_index on life.leaves_history_item (qq_group_no);
create index leaves_history_item_qq_no_index on life.leaves_history_item (qq_no);
create index leaves_history_item_time_of_occurrence_index on life.leaves_history_item (time_of_occurrence);

View File

@@ -0,0 +1,36 @@
-- 描述一个人的身份证号和其他个人信息
create table sku.person
(
id bigserial not null
constraint person_pk primary key,
address1 smallint not null,
address2 smallint not null,
address3 smallint not null,
birthday date not null,
sequence_number smallint not null,
gender_coder smallint not null,
check_code smallint not null,
sex boolean not null,
name varchar(30) not null,
name_initials varchar(30) not null,
address varchar(150) not null default '',
phone_number varchar(25),
update_time integer not null
);
comment on table sku.person is 'person';
comment on column sku.person.address1 is 'address1';
comment on column sku.person.address2 is 'address2';
comment on column sku.person.address3 is 'address3';
comment on column sku.person.birthday is 'birthday';
comment on column sku.person.sequence_number is 'sequence number';
comment on column sku.person.gender_coder is 'gender coder';
comment on column sku.person.check_code is 'check code';
comment on column sku.person.sex is 'Biological sex';
comment on column sku.person.name is 'name';
comment on column sku.person.name_initials is 'name initials';
comment on column sku.person.address is 'full address text';
comment on column sku.person.phone_number is 'phone number';
create index person_birthday_index on sku.person (birthday);
create unique index person_id_code_index on sku.person (address1, address2, address3, birthday, sequence_number, gender_coder);
create index person_name_initials_index on sku.person (name_initials);
create index person_sex_index on sku.person (sex);

295
PostgreSQL/qqnt/qqnt.sql Normal file
View File

@@ -0,0 +1,295 @@
-- use database fortern
create schema qqnt;
comment on schema qqnt is 'Fortern的QQNT聊天记录';
-- https://docs.aaqwq.top/view/db_file_analysis/nt_msg.db.html
-- group_msg_table
create table qqnt.group_msg_table
(
-- 40001 消息ID具有唯一性
id bigint not null
primary key,
-- 40002 消息随机值,用于对消息去重
msg_random bigint not null,
-- 40003 群聊消息ID在每个聊天中依次递增
msg_seq integer not null,
-- 40010 聊天类型私聊为1群聊为2频道为4公众号为103企业客服为102临时会话为100
chat_type integer not null,
-- 40011 消息类型,详见下表
msg_type integer not null,
-- 40012 pb消息类型详见下表
sub_msg_type integer not null,
-- 40013 发送标志本机发送的消息为1其他客户端发送的为2别人发的消息为0 转发消息为5在已退出或被封禁的消息中为当日整点时间戳
send_type integer not null,
-- 40020 nt_uid, 对应 nt_uid_mapping_table
sender_uid varchar(200) not null,
-- 40026 未知
q40026 integer,
-- 40021 会话ID
peer_uid varchar(200) not null,
-- 40027 会话ID通常是群号
peer_uin bigint not null,
-- 40040 未知
q40040 integer,
-- 40041 发送状态2为成功0为发送被阻止如不是对方好友1为尚未发送成功比如网络问题3为消息被和谐
send_status integer not null,
-- 40050 发送消息时的时间戳(精确到秒)
msg_time integer not null,
-- 40052 未知
q40052 integer,
-- 40090 发送者群名片,旧版 QQ 迁移数据中格式为 name(12345) 或 name<i@example.com> QQNT 中为群名片
send_member_name varchar(200),
-- 40093 发送者昵称,旧版 QQ 此字段为空QQNT 中未设置群名片时才有此字段
send_nick_name varchar(200) not null,
-- 40800 聊天消息,最为复杂
msg_content bytea,
-- 40900 不同情况下存在不一样的数据以列40011为区分。 值为8时列40900存贮转发聊天的缓存值为9时列40900存贮引用的消息
msg_quote bytea,
-- 40105 未知
q40105 integer,
-- 40005 只知道自己发的消息一定概率存在数值正常情况为0
q40005 integer,
-- 40058 当日 0 时整的时间戳格式,精确到秒,时区为 UTC+08:00
midnight_timestamp integer not null,
-- 40006 未知
elem_id bigint not null,
-- 40100 @状态
at_status integer,
-- 40600 十六进制。值为 14 00 时,为回复消息,为 6 代表有人回复自己为2代表他人回复他人值为c2e91304a8d114****时(不唯一),为撤回消息
msg_status bytea,
-- 40060 已退出或已解散的群聊标志
disband_flag integer,
-- 40850 该消息所回复的消息的序号,默认为 0
reply_to bigint,
-- 40851 未知,默认为 0 或 NULL
q40851 integer,
-- 40601 未知,默认为 NULL
q40601 bytea,
-- 40801 未知,默认为 NULL
q40801 bytea,
-- 40605 未知,默认为 NULL
q40605 bytea,
-- 40030 群号
group_no bigint not null,
-- 40033 消息发送者QQ号
qq_no bigint not null,
-- 40062 存贮详细表态信息(包括表态表情和表态数量),其数字与 QQBOT 中表情编号对应(超级表情不在此列表中)
emoji bytea,
-- 40083 表态表情数量总和?
emoji_num integer,
-- 40084 表态表情数量总和?
emoji_num_2 integer
);
-- 发送者QQ号索引
create index qq_no_index on qqnt.group_msg_table (qq_no);
-- 群号与QQ号联合索引
create index group_no_index on qqnt.group_msg_table (peer_uin, qq_no);
-- 时间索引
create index group_msg_time_index on qqnt.group_msg_table (msg_time);
-- 群号与日期的索引
create index group_no_msg_time_index on qqnt.group_msg_table (peer_uin, msg_time);
-- 消息类型联合索引
create index group_msg_type_index on qqnt.group_msg_table (peer_uin, msg_type, sub_msg_type);
-- 40011 msg_type 消息类型
-- 无消息消息损坏多见于已退出群聊且时间久远0
-- 消息空白msgid存在应该是没加载出来1
-- text文本消息2
-- 群文件3
-- 我的聊天记录里没有4~大佬带带>︿<
-- 系统灰字消息5
-- 语音消息6
-- 视频文件7
-- 合并转发消息8
-- 回复类型消息9
-- 红包10
-- 应用消息11
-- 40012 sub_msg_type 区分pb消息类型
-- 非常规text消息0
-- 普通文本消息1
-- 群文件其他类型消息1
-- 图片消息2
-- 群文件图片消息2
-- 群公告3
-- 群文件视频消息4
-- 撤回消息提醒4
-- 群文件音频消息8
-- 原创表情包8
-- 射精消息11
-- 拍一拍消息12
-- 群文件docx消息16
-- 平台文本消息32
-- 群文件pptx消息32
-- 回复类型消息33
-- 群文件xlsx消息64
-- 存在链接161
-- 群文件zip消息512
-- 群文件exe消息2048
-- 表情消息4096
-- msg_type(40011) 与 sub_msg_type(40012) 组合可判断消息类型
-- 由于优先级问题特别是2类别的信息部分消息不满足以下规则
-- 空消息00
-- 已撤回消息10
-- 普通文本类消息21
-- 图片消息22
-- 只带图片的纯文本消息23
-- 纯表情消息216
-- 带表情的纯文本消息217
-- 带图片带表情的纯文本消息219
-- 纯链接消息2129
-- 带表情链接消息2145
-- 机器人消息2577
-- 机器人Markdown消息265
-- @消息235
-- 回复引用消息不带表情233
-- 回复引用消息带表情249
-- 收藏表情22
-- 收藏表情包24096
-- 群文件其他类型消息31
-- 群文件图片pngjpg消息32
-- 群文件视频消息34
-- 群文件音频mp3flac消息38
-- 群文件docx消息316
-- 群文件pptx消息332
-- 群文件xlsx消息364
-- 群文件zip消息3512
-- 群文件exe消息32048
-- 拍一拍消息512
-- 撤回消息提醒54
-- amr语音文件消息60
-- 视频文件消息70
-- 合并转发消息80
-- 回复消息933
-- 回复带图片消息(无@934
-- 回复带图片消息(有@935
-- 回复带图片带@935
-- 回复卡片引用消息949
-- 带表情回复949
-- 带表情带图片带@951
-- 回复存在链接的消息9161
-- 红包100
-- 应用消息如小程序110
-- 群公告113
-- 表情包178
-- 原创表情178
-- c2c_msg_table
create table qqnt.c2c_msg_table
(
-- 40001 消息ID具有唯一性
id bigint not null
primary key,
-- 40002 消息随机值,用于对消息去重
msg_random bigint not null,
-- 40003 位置
q40003 integer not null,
-- 40010 聊天类型私聊为1群聊为2频道为4公众号为103企业客服为102临时会话为100
chat_type integer not null,
-- 40011 消息类型,详见上表
msg_type integer not null,
-- 40012 pb消息类型详见上表
sub_msg_type integer not null,
-- 40013 发送标志,可能?
send_type integer not null,
-- 40020 未知
q40020 varchar(200) not null,
-- 40026 未知
q40026 integer not null,
-- 40021 未知
q40021 varchar(200) not null,
-- 40027 未知
q40027 integer not null,
-- 40040 未知
q40040 integer not null,
-- 40041 未知
q40041 integer not null,
-- 40050 发送消息时的时间戳(精确到秒)
msg_time integer not null,
-- 40052 未知
q40052 integer not null,
-- 40090 未知
q40090 text,
-- 40093 消息发送者的 QQ 昵称或是备注名
q40093 varchar(200) not null,
-- 40080 消息内容
q40800 bytea,
-- 40900 未知
q40900 bytea,
-- 40105 未知
q40105 integer not null,
-- 40005 未知
q40005 integer not null,
-- 40058 当日 0 时整的时间戳格式,精确到秒,时区为 UTC+08:00
midnight_timestamp integer not null,
-- 40006 未知
q40006 bigint not null,
-- 40010 未知
q40100 integer not null,
-- 40600 未知
q40600 bytea,
-- 40060 未知
q40060 integer not null,
-- 40850 未知
q40850 integer not null,
-- 40851 未知
q40851 integer not null,
-- 40601 未知
q40601 bytea,
-- 40801 未知
q40801 bytea,
-- 40605 未知
q40605 bytea,
-- 40030 对方 QQ 号(无论是对方还是自己发送的消息)
peer_qq_no bigint not null,
-- 40033 发送者的 QQ 号
sender_qq_no bigint not null,
-- 40062 未知
q40062 bytea,
-- 40083 未知
q40083 integer not null,
-- 40084 未知
q40084 integer not null
);
-- 时间索引
create index c2c_msg_time_index on qqnt.c2c_msg_table (msg_time);
-- 私聊者 QQ 号与时间的索引
create index qq_no_msg_time_index on qqnt.c2c_msg_table (peer_qq_no, msg_time);
create table qqnt.group_msg_fts
(
-- 主键id
id bigint primary key,
-- 消息内容
msg_text text,
-- 文件名
file_name varchar(250),
-- 41703 未知
q41703 varchar(50),
-- 41704 未知
q41704 varchar(50),
-- 41705 未知
q41705 varchar(50),
-- 41706 未知
q41706 varchar(50),
-- 41707 未知
q41707 varchar(50),
-- 41701 group_msg_table的id的外键
msg_id bigint unique,
-- 40050 发送消息时的时间戳(精确到秒)
msg_time integer not null,
-- 40003 群聊消息ID在每个聊天中依次递增
msg_seq integer not null,
-- 40010 聊天类型私聊为1群聊为2频道为4公众号为103企业客服为102临时会话为100
chat_type integer not null,
-- 40021 会话ID
peer_uid varchar(200) not null,
-- 40027 会话ID
peer_uin bigint not null,
-- 40020 nt_uid, 对应 nt_uid_mapping_table
sender_uid varchar(200) not null
);
-- 时间索引
create index msg_time_index on qqnt.group_msg_fts (msg_time);
-- 群号与时间的索引
create index group_msg_time_index on qqnt.group_msg_fts (peer_uin, msg_time);