1.启动关闭
su - kingbase
sys_ctl -D /home/kingbase/data stop
su - kingbase
sys_ctl -D /home/kingbase/data start
2.修改密码
alter user sae with password '123123';
3.关键字和标识符:
关键字是SQL语言中具有特定意义的单词,例如,SELECT、UPDATE等。
标识符是标识SQL语句中所使用的表、列或其它数据库对象的名称。
关键字和标识符具有相同的词法结构。关键字是系统使用的标识符,大部分是系统保留使用的,用户标识符尽量不与关键字相同。
4.大小写
1.1 kingbase大小写敏感的特点
在安装数据库时,默认是大小写敏感的,case_sensitive为on,其特性和Oracle基本一致:
1) 没有使用界定标识符(双引号)引起来的表名、列名,会默认转为大写;访问(查询)时也会将非界定标识符转为大写进行匹配,
所有使用表面感觉也是不区分大小写。
2) 使用界定标识符引起来的表名、列名,将以引起来的大小写进行存储,以及后续的查询匹配;所以界定标识符新建的表或列,
查询时应该使用同样的界定标识;所以建议统一使用非界定标识。例子:create table "aBc"(id int);select * from "aBc";
3)连接登录时考虑成使用界定标识符的情形。
1.2 大小写不敏感的特点
在安装时,如果选择了case_insensitive,则数据库会被初始化为大小写不敏感。大小写不敏感的表现:
1) 在创建表时,没有使用界定标识符(双引号)引起来的表名、列名,默认以当前输入的大小写进行存储,查询时也以全小
写进行匹配。
2) 在查询时,没有使用界定标识符(双引号)引起来的表名、列名,默认都转为小写进行匹配。
3) 使用界定标识符引起来的表名、列名,将以引起来的大小写进行存储,以及后续的查询匹配。由于是大小写不敏感,所以使用界定或非界定
标识符都可以查询出来,只要字母一样(不区分大小写),如:create table "tYY1"(id int);
select * from tyy1;select * from "tyy1";select * from "tYy1";select * from "tYY1";都可以成功。
注意: 无论case_insensitive如何取值,SQL语句中的关键字是不区分大小写的。
一般的规则是,如果对于包含列出的关键词中任意一个作为标识符的命令得到虚假的解析器错误,应该尝试用双引号把那个标识符括起来看看问题是否消失。
postgresql(与kingbase大小写敏感情况类似,只是kingbase(非界定)是存储为大写字母)
1.postgresql是大小写敏感的。数据库名、表名、列名区分大小写。
2.在postgresql中,执行sql语句时,会把所有标识符(表名、列名、库名等)的字符串转换成小写。所有又说postgresql不区分大小写。
3.双引号可以强制pg按双引号内的字母大小写存储,避免pg自动转换为小写字母。
4.标识符尽量用小写,避免双引号。
5.逻辑备份恢复
1.备份单库--二进制模式-Fc
sys_dump -h192.169.49.100 -p54321 -Usystem -Wsystem -Fc -f lems1230.dmp lems
sys_restore -Usystem -W123456 -d lems lems1230.dmp
2.备份某schema
sys_dump -h192.169.49.100 -p54321 -Ulems -Wlems#110 -n ods -f ods0416.sql lems
ksql -Usystem -Wsystem -d lems -f ods0416.sql
3.备份表
sys_dump -h192.169.49.100 -p54321 -Ulems -Wlems#110 -t lems.t1 -t lems.t2 -f tt.sql lems
4.备份表结构
sys_dump -h192.169.49.100 -p54321 -Ulems -Wlems#110 -s -t lems.t1 -t lems.t2 -f tt.sql lems
4.备份/提取函数
1)二进制备份文件
sys_dump -h192.169.49.100 -p54321 -Ulems -Wlems#110 -s -Fc -f lems0416.dump lems
sys_restore -l lems0416.dump|grep FUNCTION(PROCEDURE)>list
sys_restore -L list lems0416.dump>function.sql
使用带数据的备份也可以,备份必须是二进制模式。
2)sql备份文件
sys_dump -h192.168.1.101 -p54321 -Usystem -W123456 -n public -s -f public.sql newcao
sed -n '/Kingbase database dump/,/SET default_with_oids = false/'p public.sql >function.sql
6.外部表:
外部表det---外部服务器des---外部数据包装器dew(需要函数)
外部用户映射deu:外部表所在数据库的用户与物理表所属用户的关联;可理解为外部表用户的权限扩充(有了外部表对应物理表的访问权限)。
要创建一个外部表,你必须具有该外部服务器上的USAGE特权,以及该表中用到的所有列类型上的USAGE特权。
7.函数存储过程
函数存储过程一般不需要授权,任何用户默认都有execute权限。
select * from information_schema.routine_privileges where grantee='postgres';
8.kingbase schema usage权限查询方式整理:\dn+
select * from sys_catalog.sys_namespace where nspname='lems'
9.kingbase 数据库权限
select * from sys_catalog.sys_database';
10.
ALTER SYSTEM命令提供了一种改变全局参数默认值的从SQL可访问的方法
SET命令允许修改对于一个会话可以本地设置的参数的当前值, 它对其他会话没有影响
11.默认权限
select * from sys_catalog.sys_default_acl;
SELECT sys_catalog.sys_get_userbyid(d.defaclrole) AS "Granter",
n.nspname AS "Schema",
CASE d.defaclobjtype WHEN 'r' THEN 'table' WHEN 'S' THEN 'sequence' WHEN 'f' THEN 'function' WHEN 'T' THEN 'type' END AS "Type",
sys_catalog.array_to_string(d.defaclacl, E', ') AS "Access privileges"
FROM sys_catalog.sys_default_acl d
LEFT JOIN sys_catalog.sys_namespace n ON n.oid = d.defaclnamespace
ORDER BY 1, 2, 3;
12.日期时间截断
date_trunc('second',now()::timestamp without time zone);
13慢查询
select * from sys_stat_activity;
select from sys_stat_get_activity(pid)
SELECT sys_stat_get_backend_pid(s.backendid) AS pid,
sys_stat_get_backend_activity(s.backendid) AS query
FROM (SELECT sys_stat_get_backend_idset() AS backendid) AS s;
SELECT procpid,s.START,now() - s.START AS lap,current_query
FROM(SELECT
backendid,
sys_stat_get_backend_pid (S.backendid) AS procpid,
sys_stat_get_backend_activity_start (S.backendid) AS START,
sys_stat_get_backend_activity (S.backendid) AS current_query
FROM
(SELECT
sys_stat_get_backend_idset () AS backendid
) AS S
) AS S
WHERE
current_query <> '
ORDER BY
lap asc;
慢查询:
(1)
logging_collector = on
log_destination = 'stderr'
log_directory = 'log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_rotation_age = 1440 #minute,多长时间创建新的文件记录日志。0 表示禁扩展。
log_rotation_size = 10240 #kb,文件多大后创建新的文件记录日志。0 表示禁扩展。
log_truncate_on_rotation = on #可重用同名日志文件
log_min_duration_statement = 5000 #milliseconds,记录执行5秒及以上的语句,跟踪慢查询语句,单位为毫秒。如设置 5000,表示日志将记录执行5秒以上的SQL语句
log_statement = ddl #需设置跟踪所有语句,否则只能跟踪出错信息,设置跟踪的语句类型,有4种类型:none(默认), ddl, mod, all。跟踪所有语句时可设置为 "all";与慢查询无关。
select pg_reload_conf() 加载配置
track_activity_query_size
(2)sys_stat_statements扩展
(3)select * from sys_stat_activity;
1) 查看连接数:select count(*) from sys_stat_activity where pid <> sys_backend_pid();
2) 查看正在执行的查询数:select datname,count(*) as open,count(*) filter (where state = 'active' ) as active,count(*) filter (where state = 'idle' ) as idle,count(*) filter (where state = 'idle in transaction' ) as idle_in_trans from sys_stat_activity group by rollup(1);
3) 查看连接数:select datname,usename,client_addr,count(*) from sys_stat_activity where pid<>sys_backend_pid() group by 1,2,3 order by 1,2,4 desc;
4) 查看大于1s的sql:select * from sys_stat_activity where state<>'idle' and now()-query_start > interval '1 s' order by query_start ;
5) 查看大于5分钟的长事务:select pid,query,state from sys_stat_activity where state<>'idle' and (backend_xid is not null or backend_xmin is not null) and now()-xact_start > interval '5 min' order by xact_start;
6) 查询活动会话:select pid,usename,datname,query,client_addr from sys_stat_activity where pid<>sys_backend_pid() and state='active' order by query;
7) select pid,sys_blocking_pids(pid) as blocked,state,query,wait_event,wait_event_type from sys_stat_activity where state != 'idle';
15、查看是否锁表行锁
(1)数据库锁表监控
select database,relation,sc.relname,pid,mode,granted FROM sys_locks sl left join sys_database sd
on sl.database=sd.oid left join sys_class sc on sl.relation=sc.oid WHERE sys_backend_pid()<>sl.pid
and granted='f';
(2)谁阻塞了谁
select pid,pg_blocking_pids(pid),wait_event_type,wait_event,query from pg_stat_activity ;
(3)杀掉阻塞pid
SELECT sys_terminate_backend(PID) ;
(4)某表的锁信息
select * from sys_locks where pid=1667;
select database,relation,pid,mode,granted from sys_locks where relation='mytable'::regclass;
sys_stat_statements
配置:
shared_preload_libraries='pg_stat_statements' 重启
track_io_timing = on
track_activity_query_size = 4096 重启
create extension pg_stat_statements;
pg_stat_statements.max = 10000
pg_stat_statements.track = all
pg_stat_statements.track_utility = on
pg_stat_statements.save = on
总执行时间最长:
SELECT query,calls,round(total_exec_time::numeric, 2) AS total_time,round(mean_exec_time::numeric, 2) AS mean_time,round((100 * total_exec_time / sum(total_exec_time) OVER ())::numeric, 2) AS percentage FROM sys_stat_statements ORDER BY total_exec_time DESC LIMIT 10;
最耗io的sql
SELECT query, calls, round(total_exec_time::numeric, 2) AS total_time, round(blk_read_time::numeric, 2) AS io_read_time, round(blk_write_time::numeric, 2) AS io_write_time, round((100 * total_exec_time / sum(total_exec_time) OVER ())::numeric, 2) AS percentage FROM pg_stat_statements ORDER BY blk_read_time + blk_write_time DESC LIMIT 10;
最耗共享内存的sql
select * from pg_stat_statements order by shared_blks_hit+shared_blks_read desc limit 5;
查看qps:
with a as (select sum(calls) s, sum(case when ltrim(query,' ') ~* '^select' then calls else 0 end) q from pg_stat_statements), b as (select sum(calls) s, sum(case when ltrim(query,' ') ~* '^select' then calls else 0 end) q from pg_stat_statements , pg_sleep(1)) select b.s-a.s QPS, b.q-a.q read_QPS, -- 读QPS b.s-b.q-a.s+a.q write_QPS -- 写QPS from a,b;
单次调用最耗IO SQL TOP 5
select userid::regrole, dbid, query from pg_stat_statements order by (blk_read_time+blk_write_time)/calls desc limit 5;
总最耗IO SQL TOP 5
select userid::regrole, dbid, query from pg_stat_statements order by (blk_read_time+blk_write_time) desc limit 5;
最耗时 SQL,单次调用最耗时 SQL TOP 5
select userid::regrole, dbid, query from pg_stat_statements order by mean_time desc limit 5;
总最耗时 SQL TOP 5
select userid::regrole, dbid, query from pg_stat_statements order by total_time desc limit 5;
响应时间抖动最严重 SQL
select userid::regrole, dbid, query from pg_stat_statements order by stddev_time desc limit 5;
最耗共享内存 SQL
select userid::regrole, dbid, query from pg_stat_statements order by (shared_blks_hit+shared_blks_dirtied) desc limit 5;
最耗临时空间 SQL
select userid::regrole, dbid, query from pg_stat_statements order by temp_blks_written desc limit 5;
select pg_stat_statements_reset();
快照:
CREATE unlogged TABLE stat_statements_snapshots AS SELECT now() AS ts, * FROM pg_stat_statements WHERE false;
INSERT INTO stat_statements_snapshots SELECT now(), * FROM pg_stat_statements;
\watch 60
16.hash join
Hash Join只能用于相等连接,且只能在CBO优化器模式下。相对于nested loop join,hash join更适合处理大型结果集
Hash Join的执行计划第1个是探查表(probe table),也叫outer table,大表;第2个是hash表(build table),也叫inner table,小表方便放入内存,
Hash表也就是所谓的内表,探查表所谓的外表
两者的执行计划形如:
nested loop
outer table --驱动表
inner table
hash join
build table probe table (outer table) --驱动表
probe table build table(inner table)
17.
SEMMSL
含义:每个信号量set中信号量最大个数
设置:最小250;对于processes参数设置较大的系统建议设置为processes+10
SEMMNI
含义:linux系统信号量set最大个数
设置:最少128
SEMMNS
含义:linux系统中信号量最大个数
设置:最少32000;SEMMSL * SEMMNI
SEMOPM
含义:semop系统调用允许的信号量最大个数
设置:最少100;或者等于SEMMSL;最大值为1000
ipcs只能显示System V的信息
18.生成测试数据
insert into test(id,name,birthday) select generate_series(1,10000),random_string(32),now();
create or replace function random_string(integer)
returns text as
$body$
select upper(array_to_string(array(select substring('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' FROM (ceil(random()*62))::int FOR 1) FROM generate_series(1, $1)), ''));
$body$
language sql volatile;
19.复制表结构
create table 表名 (like 表名2 including constraints including indexes including defaults);
20.二级索引与mvcc
mysql当二级索引页面中的DB_MAX_ID(标识修改索引页面的最大事务ID)大于当前事务是索引行需要回聚集索引判断可见性。
kingbase可见性映射被设置时,表示可以只访问索引获得数据。
21.开启归档
mkdir -p /home/kingbase/ES/V8/data/archive
chown -R kingbase.kingbase /home/kingbase/ES/V8/data/archive
wal_level = logical
archive_mode = on
archive_command = 'cp %p /home/kingbase/ES/V8/data/archive/%f'
archive_dest = '/home/kingbase/ES/V8/data/archive'
select sys_switch_xlog();
select * from pg_settings where name in ('wal_level','archive_mode','archive_command');
select * from pg_stat_get_archiver();
22.表大小
SELECT table_schema || '.' || table_name AS table_full_name, sys_size_pretty(sys_total_relation_size('"'
|| table_schema || '"."' || table_name || '"')) AS size
FROM information_schema.tables where table_schema='bss'
ORDER BY
sys_total_relation_size('"' || table_schema || '"."' || table_name || '"') DESC;
SELECT
table_name,
sys_size_pretty(table_size) AS table_size,
sys_size_pretty(indexes_size) AS indexes_size,
sys_size_pretty(total_size) AS total_size
FROM (
SELECT
table_name,
sys_table_size(table_name) AS table_size,
sys_indexes_size(table_name) AS indexes_size,
sys_total_relation_size(table_name) AS total_size
FROM (
SELECT ('"' || table_schema || '"."' || table_name || '"') AS table_name
FROM information_schema.tables where table_schema='public'
) AS all_tables
ORDER BY total_size DESC
) AS pretty_sizes;
23.复制槽
SELECT sys_create_logical_replication_slot('logical_slot', 'test_decoding');
select * from sys_replication_slots where slot_name='logical_slot';
SELECT * FROM sys_logical_slot_peek_changes('logical_slot', NULL, NULL);
24.index only scans
explain (analyze,buffers,costs off) select a from t1 where b = 5;
根据Heap Fetches的数据量判断index only scans的真实效果
25.查看文件路径
select sys_relation_filepath('pof_run');
26.全文索引
create extension zhparser;
create text search configuration zhongwen_parser (parser = zhparser);
alter text search configuration zhongwen_parser add mapping for n,v,a,i,e,l,j with simple;
select ts_token_type('zhparser'); token类型
select * from pg_ts_config;
select to_tsvector('zhongwen_parser','人大金仓致力于提供高可靠的数据库产品');
create index idx_name on table using gin(to_tsvector('zhongwen_parser', field));
SELECT * FROM table WHERE to_tsvector('zhongwen_parser', field) @@ '公司';
\dF和\dFp命令查看配置
27.分析函数和窗口函数
分析函数往往与窗口函数一起使用,与聚合函数不同他们可以返回分组内的所有行和统计值。
over()为窗口函数
rank(),dense_rank()与row_number()
28.查看所有表的索引的使用情况
select relname, indexrelname, idx_scan, idx_tup_read, idx_tup_fetch from pg_stat_user_indexes order by idx_scan asc, idx_tup_read asc, idx_tup_fetch asc;
查看某个表的索引使用情况
select relname, indexrelname, idx_scan, idx_tup_read, idx_tup_fetch from sys_stat_user_indexes where relname = table_name order by idx_scan asc, idx_tup_read asc, idx_tup_fetch asc;
129.timestamp
timestamp with time zone转unix时间会丢掉时区为utc标准时间
timestamp转unix时间按当前时间转换
--日期转时间戳
SELECT EXTRACT(epoch FROM NOW());
SELECT EXTRACT(epoch FROM CAST('2017-12-06 00:17:10' AS TIMESTAMP));
--时间戳转日期
SELECT TO_TIMESTAMP(1512490630)
130.表列信息
pg_statistic 目录pg_statistic存储有关数据库内容的统计数据。其中的项由ANALYZE创建,查询规划器会使用这些数据来进行查询规划。
pg_attribute 目录pg_attribute存储有关表列的信息。数据库中的每一个表的每一个列都恰好在pg_attribute中有一行。
131.获取oid
postgres=# select oid from pg_class where relname='foo';
postgres=# select 'foo'::regclass::oid;
select 'tb1'::regclass::int;
select 32894::regclass;
132.
xmin:最早仍活跃的事务ID(以下简称XID),早于此XID的事务要么被提交并可见,要么回滚要么丢弃。
xmax:最后已完结事务(COMMITTED/ABORTED)的事务ID + 1。
xip_list:在”拍摄”快照时仍进行中的事务ID。该列表包含xmin和xmax之间的活动事务ID。
总结一下,简单来说,对于给定的XID:
XID ∈ [1,xmin),过去的事务,对此快照均可见;
XID ∈ [xmin,xmax),不考虑子事务的情况,仍处于IN_PROGRESS状态的,不可见;COMMITED状态,可见;ABORTED状态,不可见;
XID ∈ [xmax,∞),未来的事务,对此快照均不可见;
133.buffercache
SELECT
c.relname, count(*) AS buffers,usagecount
FROM pg_class c
INNER JOIN pg_buffercache b
ON b.relfilenode = c.relfilenode
INNER JOIN pg_database d
ON (b.reldatabase = d.oid AND d.datname = current_database())
GROUP BY c.relname,usagecount
ORDER BY usagecount,c.relname;
134.复制表
create table 表名 (like 表名2 including constraints including indexes including defaults);
135.bitmap index scan
bitmap scan的作用就是通过建立位图的方式,将回表过程中对表访问随机性IO的转换为顺行性行为,从而减少查询过程中IO的消耗。
简单描述:为表中的每一个块建立位图映射,每个块对应bitmap中的一位;如果索引扫描到某块的行(tid)满足条件表达式,便将此块对应bitmap中的位置为1,
当多个bit为置1(如果很少bit位置1就会使用index scan),bitmap将置为1的位按照页号进行排序,然后heap表进行scan时相当于顺序读取,I/O代价较低。
bitmap index scan可以使用多个索引,可以方便的进行多个索引的与、或操作。
上面只是简单理解,其实bitmap很复杂,它不仅可以表示块,还可以表示到块中的行,只是如果行数很多,它会自动退化为有损(«lossy»)位图,只标识到块,减少内存占用。
摘录:(访问方法首先返回与条件匹配的所有TIDs(位图索引扫描节点),并且从这些TIDs构建行版本的位图。然后从表中读取行版本(位图堆扫描),每个页面只读取一次。
请注意,在第二步中,可能会重新检查条件(重新检查条件)。检索到的行数可能太大,行版本的位图无法完全适合RAM(受«work_mem»参数限制)。在这种情况下,
位图仅针对包含至少一个匹配行版本的页面构建。这个“有损”(«lossy»)位图需要的空间更少,但在阅读页面时,我们需要重新检查其中包含的每一行的条件。
请注意,即使对于少量检索到的行并因此“精确”(«exact»)位图(例如在我们的示例中),«Recheck Cond»步骤仍然在计划中表示,尽管实际上并未执行。)
136.字段值的类型不匹配会导致索引失效和cost值不准确
EXPLAIN analyze SELECT copt_rcod_id,his_info_indc,delt_indc,SBMTD_INDC,FOUND_TIME,blngs_qtrp_id FROM copt_rcod200
WHERE his_info_indc = 1 AND delt_indc = 0 ORDER BY SBMTD_INDC ASC,FOUND_TIME DESC LIMIT 0, 15;
EXPLAIN analyze SELECT copt_rcod_id,his_info_indc,delt_indc,SBMTD_INDC,FOUND_TIME,blngs_qtrp_id FROM copt_rcod200
WHERE his_info_indc = '1' AND delt_indc = '0' ORDER BY SBMTD_INDC ASC,FOUND_TIME DESC LIMIT 0, 15;
l37.硬解析软解析
嵌入式sql,已经过时,各种语言都有自己的数据库接口api,如java JDBC,python db-api
嵌入式sql EXEC SQL prepare sql名 from "普通sql"(预备语句、sql预编译、sql预处理) 静态sql 动态sql 变量绑定
EXEC SQL 普通sql
变量绑定就是sql预编译(prepare)
共享游标 父游标(解析树)、子游标(执行计划)
游标(会话游标) sql语句执行结果的内存缓存(pga) 也可以理解为一个sql语句,一个sql就称为一个游标
共享游标 会话游标
静态游标 动态游标
显示游标 隐式游标
父游标 子游标
138 hash
哈希算法存取之所以快,是因为其 直接通过关键字key 哈希后得到要存取的记录内存存储位置
139 plan cache(prepare)与数据倾斜问题
1.数据库倾斜严重的表不使用prpare,让它每次都生成执行计划,如动态sql
2.先执行数据量最小的值的sql(最少5次,让它生成generic plan cache),这样之后数据量大的值的sql bind generic plan时,cost值超过了generic plan的平均cost,
那会重新生成执行计划,避免plan cache倾斜。
140 cmin和cmax
PG中每个表的每行都包含了一些系统字段,其中包括cmin和cmax。
cmin:插入该元组的命令在插入事务中的命令标识(从0开始累加)
cmax:删除该元组的命令在插入事务中的命令标识(从0开始累加)
cmin和cmax用于判断同一个事务内的其他命令导致的行版本变更是否可见。如果一个事务内的所有命令严格顺序执行,那么每个命令总能看到之前该事务内的所有变更,不需要使用命令标识。然而一个事务内存在命令交替执行的情况,比如使用游标进行查询。Fetch游标时看到的是声明游标时的数据快照而不是Fetch执行时,即声明游标后对数据的变更对该游标不可见。
出于减少系统字段大小的考虑,cmin和cmax在行版本的头部使用同一个字段t_cid存储,并和t_xvac交叠。所以通过系统字段看到的cmin和cmax的值总是相同的。
当xmax为0,即行版本还没有被删除时,t_cid代表插入命令的命令标识。
当xmax不为0,且插入事务标识xmin和删除事务标识xmax不同时,t_cid代表删除命令的命令标识。
当xmax不为0,且插入事务标识xmin和删除事务标识xmax相同时,t_cid代表组合命令标识。在backend的私有空间存储了组合命令标识到实际的{cmin,cmax}组合的映射。
执行VACUUM FULL时不需要cmin和cmax,所以t_xvac可以和t_cid共用一个存储空间。
1)非更新性的SQL和其后的第一个更新性SQL的命令标识相同
2)同一个事务内的插入或删除行为对当前命令有效的条件是 cmin(或cmax) 命令标识。
141.oom
cat /proc/sys/vm/overcommit_memory
vm.overcommit_memory = 0
#0 试探式的overcommit,1 对内存申请来者不拒,2 禁止overcommit
vm.overcommit_ratio = 90
#禁止overcommit的阈值 (Physical RAM * vm.overcommit_ratio / 100) + Swap)
142.并行查询
max_worker_processes 是自定义后台工作进程和并行工作进程数量的群集范围限制
max_parallel_workers
max_parallel_workers_per_gather
min_parallel_table_scan_size
min_parallel_index_scan_size
parallel_tuple_cost
parallel_setup_cost
alter table pa set (parallel_workers =24);
pg_basebackup备份
1.备份总是从整个数据库集簇获得,不可能备份单个数据库或数据库对象。关于个体数据库备份,必须使用一个像pg_dump的工具。
2.备份通过一个常规PostgreSQL连接制作,并且使用复制协议。该连接必须由一个超级用户或者一个具有REPLICATION权限的用户建立,并且pg_hba.conf必须显式地允许该复制连接。
3.该服务器还必须被配置,使max_wal_senders 设置得足够高以留出至少一个会话用于备份,一个用于WAL流(如果使用)。
wal_level = hot_standby
archive_mode = on
kingbase安装
groupadd kingbase
useradd -r -m -g kingbase kingbase
passwd kingbase
mkdir -p kdb/data
chown -R kingbase.kingbase kdb
vi /etc/sysctl.conf
fs.aio-max-nr= 1048576
fs.file-max= 6815744
fs.nr_open= 1048576
kernel.shmall= 2097152
kernel.shmmax= 4294967295
kernel.shmmni= 4096
kernel.sem= 250 32000 100 128
net.ipv4.ip_local_port_range= 9000 65500
net.core.rmem_default= 262144
net.core.rmem_max= 4194304
net.core.wmem_default= 262144
net.core.wmem_max= 1048576
sysctl -p
ulimit限制:
临时修改
ulimit -n 51200
ulimit -u 51200
永久修改,需要修改文件 vim /etc/security/limits.conf,修改后重新登陆即可生效;
* soft nofile 655360
* hard nofile 655360
* soft nproc 655360
* hard nproc 655360
修改之后,还需要在 vi /etc/pam.d/login 最后加上一行: session required pam_limits.so
echo "session required pam_limits.so">>/etc/pam.d/login
---如果是通过systemd管理进程或服务, 则需要配置/etc/systemd/system.conf、/etc/systemd/system.conf.d/*.conf:
DefaultLimitCORE=infinity
DefaultLimitNOFILE=100000
DefaultLimitNPROC=100000
然后运行如下命令,才能生效。
sudo systemctl daemon-reload
sudo systemctl restart nginx.service
mount -o loop KingbaseES_V008R003C002B0320_Lin64_install.iso /mnt
sh setup.sh -i console
对话安装主要步骤:
1.Please choose the Install Set to be installed by this installer.
->1- Full
2- Client
3- Custom
选择1完全安装(默认1)
2.Choose License File
File Path: /home/kingbase/license_7308/license_7308_0.dat
输入注册文件路径
3.Where would you like to install?
Default Install Folder: /opt/Kingbase/ES/V8
ENTER AN ABSOLUTE PATH, OR PRESS
: /home/kingbase/kdb/
INSTALL FOLDER IS: /home/kingbase/kdb
IS THIS CORRECT? (Y/N): y
输入kingbase的安装路径,输入y确认。
4.Choose a Folder for data directory
Please choose a folder. the folder must be empty
Data folder (Default: /home/kingbase/kdb/data):
确认kingbaes数据目录(默认"安装路径/data",就用此路径)
5.Server-encoding
->1- UTF8
2- GBK
3- GB18030
选择字符集1(默认1)
6.Case-Insensetive
1- case-insensetive
->2- case-sensetive
ENTER THE NUMBER FOR YOUR CHOICE, OR PRESS
选择是否区分大小写,一般选择1不区分(默认2)
7./home/kingbase/kdb/Scripts/root.sh
使用root用户注册kingbase为系统服务,开机启动。
问题
1.驱动表的行数大于被驱动表,不知道为什么?
2.
kingbase参数
1.wal_sync_method
用来向强制 WAL 更新到磁盘的方法。如果fsync是关闭的,那么这个设置就不相关,因为 WAL 文件更新将根本不会被强制。可能的值是:
open_datasync(用open()选项O_DSYNC写 WAL 文件)
fdatasync(在每次提交时调用fdatasync())
fsync(在每次提交时调用fsync())
fsync_writethrough(在每次提交时调用fsync(),强制任何磁盘写高速缓存的直通写)
open_sync(用open()选项O_SYNC写 WAL 文件)
open_* 选项也可以使用O_DIRECT(如果可用)。不是在所有平台上都能使用所有这些选择。默认值是列表中第一个被平台支持的那个, 不过fdatasync是 Linux 中的默认值。默认值不一定是最理想的;有可能需要修改这个设置或系统配置的其他方面来创建一个崩溃-安全的配置,或达到最佳性能。这些方面在第 30.1 节中讨论。这个参数只能在postgresql.conf文件中或在服务器命令行上设置。
--去除空白符
select regexp_replace(' a s d
', E'\\s+', ' ', 'g')
--去除首空格
select regexp_replace(' a b d ',E'(^\\s*)','','g')
--去除尾空格
select regexp_replace(' a b d ',E'(\\s*$)','','g')
--去除首尾空格
select regexp_replace(' a b d ',E'(^\\s*)|(\\s*$)','','g')
--去除首尾空格的函数
select trim(' a b d ')
对象标识符类型
名字 引用 描述 值示例
oid 任意 数字形式的对象标识符 564182
regproc pg_proc 函数名字 sum
regprocedure pg_proc 带参数类型的函数 sum(int4)
regoper pg_operator 操作符名字 +
regoperator pg_operator 带参数类型的操作符 *(integer,integer) or -(NONE,integer)
regclass pg_class 关系名字 pg_type
regtype pg_type 数据类型名字 integer
regrole pg_authid 角色名 smithee
regnamespace pg_namespace 名字空间名称 pg_catalog
regconfig pg_ts_config 文本搜索配置 english
regdictionary pg_ts_dict 文本搜索字典 simple