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中的表空间及相关注意点的主要内容,如果未能解决你的问题,请参考以下文章

Oracle中的表空间

PostgreSQL的表空间

将用户当前表空间中的表和索引迁移到另一个表空间

如何在 XSL-FO 中的表行之间应用空间?

PostgreSQL的表空间

怎么查看 oracle中某个表空间里的表名