首页 > 数据库 >POSTGRESQL 创建一个表到底有什么说的? 可说的挺多的

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

时间:2023-06-19 17:03:09浏览次数:41  
标签:info POSTGRESQL tempory 临时 创建 写入 table 可说


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

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

POSTGRESQL 创建一个表到底有什么说的?  可说的挺多的_大数据_02

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

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

POSTGRESQL 创建一个表到底有什么说的?  可说的挺多的_数据库_04

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

问题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后的部分数据丢失的情况下,是可以使用的.

POSTGRESQL 创建一个表到底有什么说的?  可说的挺多的_数据库_06

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

 

SELECT * FROM pg_class WHERE relpersistence = 'u';

POSTGRESQL 创建一个表到底有什么说的?  可说的挺多的_数据库_07

同我们也可以设置将已经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';

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

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 访问这个表看我们实际上访问的是那个表.

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

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

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

POSTGRESQL 创建一个表到底有什么说的?  可说的挺多的_数据库_10

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

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

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

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

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

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

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

POSTGRESQL 创建一个表到底有什么说的?  可说的挺多的_大数据_13

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

POSTGRESQL 创建一个表到底有什么说的?  可说的挺多的_大数据_14

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

标签:info,POSTGRESQL,tempory,临时,创建,写入,table,可说
From: https://blog.51cto.com/u_14150796/6516014

相关文章

  • POSTGRESQL 主节点失败后, 在多变的情况下重新让他融入复制中
    POSTGRESQL 在主从流复制中,在主库失败切换后,从库变为主库后,如果主库不是因为硬件的原因,想继续拉起来,并且加入到新的复制关系中,一般都会通过pg_rewind的程序来进行拉起来.但不少问题反馈对pg_rewind在重新拉起旧主库出现问题,到底有什么情况下pg_rewind对你的数据库重新建立......
  • POSTGRESQL 设置hugepage 可以让系统使用内存更有效率,防止OOM
    https://www.percona.com/blog/why-linux-hugepages-are-super-important-for-database-servers-a-case-with-postgresql/https://bbs.huaweicloud.com/blogs/detail/156799Hugepage是什么,基于LINUX系统,大页面对虚拟内存管理是有必要的。除标准的4KB页面之外,还进行内存中的大页面......
  • POSTGRESQL 怎么通过explain 来分析SQL查询性能
    Explain命令是大多数数据库常用的一种展示SQL执行计划和cost的一种方式。在POSTGRESQL中EXPLAIN命令展示的信息比较详细,并且附带explain有不少的附加的命令来进行更多的展示。从命令来命令和功能来划分explainselecta.first_name,a.last_name,a.last_update,fa.film_idfrom......
  • POSTGRESQL 高可用 Patroni VS Repmgr 到底哪家强(1)
    在众多postgresql高可用模式中,主要的参与者有两位,PatroniVSrepmgr基于这二者的功能优点以及缺点相信大部分人都不是太明确,下面将根据两篇翻译的文字合并,来对两个高可用的程序来做一个比较,consandpros。 1 Repmgr是一款开源的基于postgres复制基础上的高可用软件,他基于2......
  • POSTGRESQL 14 功能有啥吸引人的
    好多人还在用postgresql10 ,12这些版本的时候,POSTGRESQL已经开启了POSTGRESQL14的旅程。那么到底Postgresql14有什么吸引人的,那就需要了解一下。 https://sql-info.de/postgresql/postgresql-14/articles-about-new-features-in-postgresql-14.html想详细了解了可以到这个......
  • POSTGRESQL openGaussDB 体系架构
    Today听了一下墨天轮举办的OpenGaussDB的专题的训练营,下面是此次线上的OpenGaussDB的体系结构的介绍。这里根据介绍快速总结出此次介绍中OpenGaussDB的特点:1 OpenGaussDB针对国产的硬件系统,如鲲鹏等硬件系统有特殊的支持和性能调试,真多国产的硬件系统有优势。2OpenGaussDB主......
  • POSTGRESQL 事务控制(二) 事务开启 (写着费力,看着费劲系列)
    今天接着上回书,事务如果在处理中没有子事务,则实现和控制是十分容易的,但如果有子事务的情况下,子事务通过transactionState结构体来实现,(上次已经提到了),每一个transactionState都指向父事务的结构体的指针.在继续往下说之前,我们的提到clog, 这是理解后面要提到的一些事情的......
  • POSTGRESQL SERVERLESS 是POSTGRESQL 数据库的未来 (译)
    以下为翻译内容多年来,PostgreSQL一直备受瞩目,对于企业来说,POSTGRESQL流行是面临众多竞争后的选择。随着企业试图摆脱昂贵的传统关系型数据库管理系统(RDBMS),但仍希望坚持使用RDBMS,开源PostgreSQL是一种具有吸引力的、更经济实惠的替代方案。曾经有两个托管PostgreSQL服务(Aurora和RDS)......
  • 在Java中创建对象的不同方法是什么?
    在这篇快速文章中,我们将讨论在Java中创建对象的五种不同方法。我们知道,类是创建对象的模板或蓝图。让我们列出在Java中创建对象的不同方法。用Java创建对象的5种不同方法1.使用新关键字2.使用  newInstance() Class类的方法3.使用  newInstance() Constructor类的方法4.使用......
  • POSTGRESQL NEON - Serverless 式的POSTGRESQL 数据库的独特技能 分支数据
    之前没有关注过SERVERLESS的数据库产品之前,我很少会关注SERVERLESS的东西,因为一直在实体机数据库类型打拼的我,从来不关心什么 云原生什么SERVERLESS,Idon'tcareaboutthat,it'snotmybusiness!!!!但是后来上云了,上的很深,没法了,开始关注什么是云原生,什么是POALRDB 最......