Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >POSTGRESQL 创建一个表到底有什么说的? 可说的挺多的

POSTGRESQL 创建一个表到底有什么说的? 可说的挺多的

作者头像
AustinDatabases
发布于 2021-07-15 06:56:24
发布于 2021-07-15 06:56:24
7710
举报
文章被收录于专栏:AustinDatabasesAustinDatabases

创建一张表,到底有什么说的, 下面是POSTGRESQL 创建数据表的官方文档的内容截图. 那我们就往下看,到底我们可以说点什么

建表的开头是关于临时表的问题,其中临时表的global 和 local,在目前的V12的版本中并没有具体的含义,

问题1 , POSTGRESQL 怎么创建一个看似global 的tempary table

问题2, POSTGRESQL 对于表是否可以有无日志表,有什么影响

问题3, POSTGRESQL 创建了实体表和临时表的表名是一致的情况下到底访问那个表

问题4, 创建表的时候需要考虑INDEX 的问题吗, 我是不是应该把INDEX 放到另外的一个表空间

问题1 , 正如上面所说,POSTGRESQL 截止目前为止是没有GLOBAL 的数据临时表的, 那么我们如果想建立一个在其他数据库意义上的GLOBAL 的临时表怎么办. 其实问题1 和 问题 2 是可以合并进行回答的

方法1, 使用商业数据库的版本 EDB, 他们支持GLOBAL TEMP 数据表

方法2, 使用POSTGRESQL 的无日志表来模拟所谓的GLOBAL 表

POSTGRESQL 的UNLOGGED TABLE, 这个功能是在POSTGRESQL 9.1 上开始的,主要的原因也是为了某些数据的写入的性能. 通过UNLOGGED TABLE 来解决的原因是,性能的问题, 我们都知道临时表是没有日志写入的,这点提高了临时表的性能,那么PG 中的UNLOGGED TABLE 本身就是在操作中不记录日志,这与 TEMP 表的实现方式类似. 或者可以想一下,我们的应用有这样一种需求,就是频繁写入日志,但我们对这样的表并不需要保证数据的安全,但我们需要日志表写入的速度,并且这样的表不能影响到数据库的I/O,因为数据在写入的时候会造成WAL LOG 的写入,如何减轻数据写入的压力.

那到底这个UNLOGGED TABLE 是不是我们需要的,回答是当然,我们付出的是数据在写入磁盘时,没有WAL LOG的保护,但换来的是整体性能的提升,对于静态数据或者日志等数据,或者对大量写入更新的表,在业务可以忍受,服务器以外CRASH后的部分数据丢失的情况下,是可以使用的.

CREATE UNLOGGED Table log_t (id int, system_info text);

SELECT * FROM pg_class WHERE relpersistence = 'u';

同我们也可以设置将已经unlogged表变为 logged , 通过UNLOGGED 可以模拟GLOBAL 临时表,在使用完毕后,可以直接DROP.

问题 3 POSTGRESQL 创建了实体表和临时表的表名是一致的情况下到底访问那个表

首先我们先建立一个容纳测试表的数据库

CREATE DATABASE class

WITH

OWNER = postgres

TEMPLATE = template1

ENCODING = 'UTF8'

LC_COLLATE = 'en_US.UTF-8'

LC_CTYPE = 'en_US.UTF-8'

TABLESPACE = pg_default

CONNECTION LIMIT = -1;

COMMENT ON DATABASE class

IS 'pg_class create table';

CREATE TEMPORARY TABLE tempory_table(

id int,

system_info text

);

CREATE TABLE tempory_table (

id int,

system_info text,

type_d varchar(10)

);

insert into tempory_table (id,system_info) values (1,'system_info');

insert into tempory_table (id,system_info,type_d) values (2,'system_info','type_d');

select * from tempory_table;

select * from pg_tables where tablename = 'tempory_table';

select * from tempory_table;

我们建立临时表和实体表,同名的数据表,在实际当中进行访问, 我们可以看到实际上访问的数据表并不是实体表而是临时表.我们也叫SESSION 临时表,我们换一个SESSION 访问这个表看我们实际上访问的是那个表.

实际上同名的临时表和实体表,在同一个生成临时表的SESSION的位置,访问同一个表名是会访问我们的临时表.

所以在建表时,强烈不建议 临时表和实体表的表名是一样的. 比如临时表建立在前面加入一个标识. 而实际上允许同一个表名在同一个数据库中存在的基础是,不同的schemaname, 普通表默认是建立在public的数据schema的基础上.

同时临时表还有很多候选项,例如在建表的时候我们使用 on commit drop;

但是实际上我们看到并没有此表,原因在于我们使用commit drop;

问题4:这个问题实际上要根据实际情况来,比如服务器上的磁盘空间,或者有高性能磁盘等,希望索引和数据分别存储在两个物理位置提高性能的项目的确是可以这样去做。

首先需要建立一个特别存放index 的 table space

create tablespace index owner current_user location '/pgdata/data_index';

这样的情况下,创建的索引可以存储在INDEX 的特殊的文件夹中

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-07-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AustinDatabases 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
PostgreSQL 建立一张表到底会产生多少文件
开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友会分到2群(共1350人左右 1 + 2 + 3 + 4) 3群 430 已关闭自由申请,新人会进4群,另欢迎 OpenGauss 的技术人员加入。
AustinDatabases
2023/09/27
2370
PostgreSQL  建立一张表到底会产生多少文件
PostgreSQL创建临时表性能下降分析
环境信息 PostgreSQL 11.5 问题 客户反馈临时表创建耗时较长,平均耗时在5ms以上,相对于之前测试阶段的创建时间有明显变慢。 根本原因 postgresql在创建表时,会预估当前表是否存在超长记录的可能,如果使用了text,varchar(555)等超大字端,会在创建表同时创建toast表及toast索引表,同时多字段会写入系统表记录,这将增大创建表的开销。 诊断步骤 psql postgres=# select count(*) from pg_class; count -------
忽而呀嘿
2020/06/08
2.6K0
PostgreSQL全局临时表插件pgtt的使用
PostgreSQL目前到最新12版本只支持本地临时表不支持全局临时表特性 ,会话退出后临时表定义和数据被删除,创建临时表语法如下:
数据和云
2020/09/22
1.6K0
Postgresql表空间
不同的数据库表空间有不同的定义: 在 postgres 中,表空间 允许在文件系统中定义数据库对象存储的位置,实质上就是指定了一个目录。 与数据库的关系 在 postgres 中,一个表空间可以让多个数据库使用,而一个数据库也可以使用多个表空间,属于“多对多”的关系; 在 oracle 中,一个表空间只属于一个数据库,而一个数据库可以使用多个表空间,属于“一对多”的关系。
DB之路
2021/07/06
1.8K0
Postgresql存储结构
如果阅读过手册一定听过postgresql cluster的概念,第一次听到这个概念可能都会有一些困惑。cluster在安装数据库时,由initdb工具生成,initdb后产生的pgdata文件夹可以理解为cluster的物理存储结构。数据库启动、停止时pg_ctl -D参数指定的文件夹即cluster文件夹,所以一个PG Server可以运行在一个PG Cluster上。
mingjie
2022/05/12
1.2K0
Postgresql存储结构
PostgreSQL常用语句
注意:select current_setting(‘server_version_num’);返回类型为text,如果需要可以转换为interger
Java架构师必看
2021/06/10
8310
PostgreSQL体系结构和基本操作
PG数据库的总控制进程,负责启动和关闭数据库实例,是一个指向PostgreS命令的链接,算是第一个PostgreS进程。Postmaster的主进程,还会fork出一些辅助子进程。
数据和云
2021/12/06
1.2K0
PostgreSQL体系结构和基本操作
PostgreSQL-快速启动,新手上路
快速安装启动PostgreSQL,完成基本操作。通过实践,逐步揭开PostgreSQL的面纱。 1.安装 yum install -y postgresql-server postgresql postgresql-libs 2.初始化数据库 postgresql-setup initdb 3.服务停止、服务启动 [root@mysql8 ~]# systemctl stop postgresql.service   [root@mysql8 ~]# systemctl status postgresql.
朱明豪
2020/03/15
1.2K0
PostgreSQL-快速启动,新手上路
《Postgresql 内幕探索》读书笔记 - 第一章:集簇、表空间、元组
PostgreSQL天然集群,多个集群可以组成集簇,有点类似军队的连、团、旅这样的组织规则。对于我们日常学习使用的单节点则是单个集簇单个集群,自己就是集群。
阿东
2023/06/27
6310
《Postgresql 内幕探索》读书笔记 - 第一章:集簇、表空间、元组
PostgreSQL体系架构介绍
PostgreSQL是最像Oracle的开源数据库,我们可以拿Oracle来比较学习它的体系结构,比较容易理解。PostgreSQL的主要结构如下:
用户8006012
2022/07/26
2.3K0
PostgreSQL查看表结构语句
在PG里面查看表结构,不如mysql那样show create table xx 这样方便。 
保持热爱奔赴山海
2022/11/14
4.3K0
PostgreSQL可拔插存储引擎表定义机制
Postgresql12开始支持可拔插存储引擎,即可拔插表访问方法。目前仅仅支持heap一种表访问方法。新增了pg_am和pg_proc系统表用于存储表访问方法的元数据。本文介绍创建表时如何处理这些元数据。
yzsDBA
2020/10/28
1.4K0
PostgreSQL可拔插存储引擎表定义机制
PostgreSQL数据库体系架构
PostgreSQL数据库的进程可以分为三类:后台进程、后端进程或叫服务器进程、客户端进程或用户进程。
用户8006012
2022/06/10
4.4K1
【赵渝强老师】史上最详细的PostgreSQL体系架构介绍
PostgreSQL是最像Oracle的开源数据库,我们可以拿Oracle来比较学习它的体系结构,比较容易理解。PostgreSQL的主要结构如下:
赵渝强老师
2024/08/11
7080
【赵渝强老师】史上最详细的PostgreSQL体系架构介绍
POSTGRESQL 学习有感,向左灵活多变,向右容器化
最近学习POSTGRESQL 看完某本书,突然有所顿悟,数据库到底应该是功能多,能减低开发的难度,还是功能缺乏,通过第三方的元素来给自己加持。
AustinDatabases
2021/02/26
5050
PostgreSQL创建表分析
脚本准备 创建表的脚本 CREATE DATABASE sampledb OWNER perrynzhou; GRANT ALL PRIVILEGES ON DATABASE sampledb TO perrynzhou; 数据登录脚本 psql -h 127.0.0.1 -d sampledb sampledb=# CREATE TABLE stu_xx_01(NAME TEXT NOT NULL,AGE INT NOT NULL); 表创建分析 表创建过程概述 服务进程接受SQ
用户4700054
2022/08/17
1.8K0
PostgreSQL 读书会 一期 系统目录表 1
最近经历了一些事情,貌似也更深层的懂得了一些之前就“懂得”的道理,也理解了之前一些不能理解的人和事。最近也反思之前所做的一切,其实都和爱有关,乔布斯曾经说过,如果你爱他,你能更深层次的切入,因为任何一件事情如果想深层次的理解,都和你爱不爱他有关,越往深层次去做,越枯燥,越难受,只有你爱了他,才能继续走下去。 这也是为什么大部分“混社会”的人都只能叫,从业者,而不是专家的原因之一吧。
AustinDatabases
2020/06/23
4340
Python:操作PostgreSQL数
  昨天使用python写了操作嵌入式数据库SQLite的方法,今天用python写了针对个人比较熟悉的开源数据库PostgreSQL的常用操作,开发过程简介如下:
py3study
2020/01/13
7610
PostgreSQL 分区表为什么要带 pg_pathman 过时了?
PostgreSQL 如果使用较早的“大仙”们,在做分区的时候会提pg_pathman,为什么一个数据库使用分区表还要一个插件,可能习惯商业数据库的“人儿们”,不大理解。这点要从PG的分区表的来源来说, PG的分区表其实是PG的表继承概念的延伸。表继承允许planner只包含那些与查询兼容的子表(分区)。同时,用户在分区管理方面还有很多工作要做:创建继承的表,编写触发器来选择合适的分区进行行插入等。为了自动化这项工作,编写了pg_partman扩展。
AustinDatabases
2020/03/26
2.1K0
PostgreSQL  分区表为什么要带 pg_pathman 过时了?
史上最全:PostgreSQL DBA常用SQL查询语句(建议收藏学习)
查看帮助命令本周六,在北京将迎来一年一度的 ACOUG年会,在本次年会上,我们将对社区过去一年的工作进行回顾和梳理,并展望和探讨下一年工作的内容,同时,本次年会也开放了直播通道,名额不多,报名从速哦~
数据和云
2019/12/24
10.7K0
相关推荐
PostgreSQL 建立一张表到底会产生多少文件
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档