lightdb/postgresql中的表空间及相关注意点
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lightdb/postgresql中的表空间及相关注意点相关的知识,希望对你有一定的参考价值。
一般来说,现在为了各司其职,都把硬盘做成了san,raid,至少lvm。但是仍然有一些用户希望可以指定表空间和索引,当然也包括冷热数据。在lightdb里面也支持该特性。如下:
lightdb@postgres=# create tablespace tab_tbs location /data1/cn/tab_tbs;
WARNING: tablespace location should not be inside the data directory
ERROR: directory "/data1/cn/tab_tbs" does not exist
lightdb@postgres=# create tablespace tab_tbs location /data1/cn/;
WARNING: tablespace location should not be inside the data directory
CREATE TABLESPACE
-- 本质上有点像oracle的OMF 文件自动管理功能,只不过OMF通过db_create_file_dest指定目录 create tablespace OMF;
lightdb@postgres=# create table tab_for_tbs(id int) tablespace tab_tbs;
CREATE TABLE
lightdb@postgres=# \\dS+ tab_for_tbs
Table "public.tab_for_tbs"
Column | Type | Collation | Nullable | Default | Storage | Stats target | Description
--------+---------+-----------+----------+---------+---------+--------------+-------------
id | integer | | | | plain | |
Tablespace: "tab_tbs"
Access method: heap
这样就在tab_tbs下创建了表。
索引也是一样的,如下:
lightdb@postgres=# create index idx_tab_for_tbs on tab_for_tbs(id) tablespace tab_tbs;
CREATE INDEX
zjh@postgres=# create tablespace my_tbs location /data1/zjh;
CREATE TABLESPACE
zjh@postgres=# create table my_tbs_tab(id int) tablespace my_tbs ;
CREATE TABLE
[zjh@hs-10-20-30-193 13592]$ pwd
/data1/zjh/PG_13_202204261/13592 #PG版本号_Catalog version number/db_oid
[zjh@hs-10-20-30-193 13592]$ ll
total 0
Catalog version number可通过lt_controldata -D /data1/zjh/data得知,如下:
[zjh@hs-10-20-30-193 13592]$ lt_controldata -D /data1/zjh/data
lt_control version number: 1300
Catalog version number: 202204261
Database system identifier: 7114486460059183269
Database cluster state: in production
- 移动整个空间的目录。
- 在lt_dump/lt_restore的时候是包含表空间定义的,所以在恢复的时候需要确保表空间存在,在同一台机器上恢复可能会有问题。
- lt_upgrade的时候是整个物理目录覆盖的。
- 另外在主备高可用下,需要确保物理目录一致,否则启动会报表空间目录相关的错误。一般来说即使相互主备,也是规划好的,不会存在冲突。
- lt_probackup,pg_basebackup,需要通过-T, --tablespace-mapping=OLDDIR=NEWDIR手动建新的表空间路径进行指定
需要注意的是,在lightdb-x分布式版本中,表空间属性不支持透传到DN节点。索引不能声明tablespace xxx子句,如下:
lightdb@postgres=# \\dS+ tab_for_tbs_103402
Table "public.tab_for_tbs_103402"
Column | Type | Collation | Nullable | Default | Storage | Stats target | Description
--------+---------+-----------+----------+---------+---------+--------------+-------------
id | integer | | | | plain | |
Access method: heap
lightdb@postgres=# create index idx_tab_for_tbs on tab_for_tbs(id) tablespace tab_tbs;
ERROR: specifying tablespaces with CREATE INDEX statements is currently unsupported
注:虽然如此,一般来说,我们是强烈建议数据文件,WAL日志,临时文件目录分开的。
从lightdb 23.1开始,将支持oracle create tablespace语法,如下:
1.1创建单个表空间
create tablespace ts_something
logging
datafile /dbf1/ts_sth.dbf
size 32m
autoextend on
next 32m maxsize 2048m
extent management local;
//
1.2创建多个表空间
CREATE TABLESPACE TS_IMAGEDATA
NOLOGGING
DATAFILE D:"oracle"oradata"DATA01.dbf SIZE 2000M,
D:"oracle"oradata"DATA02.dbf SIZE 2000M,
D:"oracle"oradata"DATA03.dbf SIZE 2000M,
D:"oracle"oradata"DATA04.dbf SIZE 2000M,
D:"oracle"oradata"DATA05.dbf SIZE 2000M EXTENT
MANAGEMENT LOCAL SEGMENT
SPACE MANAGEMENT AUTO;
同样包含GUC参数lightdb_db_create_file_dest(其值默认为GUC $data_directory/../,在lt_initdb的初始化实例的时候会被设置)作为LOCATION对应的默认值,相当于OMF自动文件管理。上述create tablespace都相当于在lightdb_db_create_file_dest指定目录下创建数据文件。
同时,LOCATION参数支持相对路径,如果路径非/开头,相对于lightdb_db_create_file_dest。例如:
create tablespace my_tbs location lt_data/zjh; 相当于$LTDATA/../lt_data/zjh。
LightDB Enterprise Postgres--金融级关系型数据库,更快、更稳、更懂金融!
以上是关于lightdb/postgresql中的表空间及相关注意点的主要内容,如果未能解决你的问题,请参考以下文章