首页
学习
活动
专区
圈层
工具
发布

PostgreSQL openGauss 数据库易犯的十个错误

5 从任意库查询pg_stat_statements模块统计信息 pg_stat_statements模块用来跟踪SQL语句的执行统计信息。...truncate在Oracle中属于DDL语句,在PostgreSQL中属于DML语句。因此,当我们使用DDL日志记录语句时,无法记录到truncate。...9 创建索引时起名为表名称 单个数据库里,索引和表的名称不能重复,因为他们都属于relation。...postgres=# create index a on a(id); ERROR: relation "a" already exists 10 把walsender当作主库 通常我们从操作系统层查看主库有...云和恩墨PG技术顾问,网名“多米爸比”,PG社区认证专家,中国首期PostgreSQL ACE Partner,多年从事基于PostgreSQL数据库的软件研发,擅长于PL/PGSQL业务迁移及优化,Oracle

1.7K30

PostgreSQL技术大讲堂 - 第28讲:索引内部结构

PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUG...Btree索引· Btree索引索引工具介绍· 如何访问索引结构1、create extension pageinspect2、查看meta块select * from bt_metap('tab1_pkey...索引· 一层结构有1层(0)结构,包括meta page, root page1、环境准备:postgres=# create extension pageinspect;postgres=# create...示例postgres=# create table t_btree(id int, info text);CREATE TABLEpostgres=# insert into t_btree select...postgres=# create index idx_t_hash_1 on t_hash using btree (info);ERROR: index row size 3720 exceeds

70720
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    进阶数据库系列(十二):PostgreSQL 索引技术详解

    唯一索引:目前,只有 B-tree 能够被声明为唯一。 表达式索引:从表的一列或多列计算而来的一个函数或者标量表达式。...table_name:要被索引的表的名称(可以被模式限定)。 method:要使用的索引方法的名称。可以选择 btree、hash、 gist、spgist、gin以及brin。...使用pageinspect扩展工具查看结构,数据准备 create extension pageinspect; --主键索引使用的是btree索引,索引名字 tb_order_pkey create...与Btree索引比较的优缺点 优点 Gist索引适用于多维数据类型和集合数据类型,和Btree索引类似,同样适用于其他的数据类型。...和Btree索引相比,Gist多字段索引在查询条件中包含索引字段的任何子集都会使用索引扫描,而Btree索引只有查询条件包含第一个索引字段才会使用索引扫描。

    5.4K40

    PostgreSQL的B-tree索引

    从root节点开始进行搜索,由于32≤ 49 < 64,所以选择32这个值进入其子节点。通过同样的方法继续向下进行搜索一直到叶子节点,最后查询到49这个值。 实际上,查询算法远不止看上去的这么简单。...然而,通过谓词model = 'Boeing 777-300'进行搜索的效率将大大降低:从root开始,判断不出选择哪个子节点进行向下搜索,因此会遍历所有子节点向下进行搜索。...这种情况下,查询计划更倾向于通过索引获取数据。 属性 下面介绍btree访问方法的特性。...| can_order | t btree | can_unique | t btree | can_multi_col | t btree | can_exclude...在我们公司 Anastasiya Lubennikova @ lubennikovaav 改进了btree,额外的非唯一列可以包含在唯一索引中。我们希望这个补丁可以被社区采纳。

    5.5K20

    Postgres15-新特性-利用pg_walinspect对WAL事件进行debug

    幸运的是,从9.3版本开始出现了“人类可读”的格式显示WAL记录的工具pg_xlogdump/pg_waldump。该工具可解析WAL日志,解读出人们可读的格式。...从最低(minimal)到最高(logical)。本案例中使用默认值replica。第一印象是 wal 记录的数量很多:仅针对几个 SQL 操作就生成了 100 条记录。...此外,由于Btree索引占用WAL大小最大,但没有在SQL语句示例中定义任何btree索引,因此这些活动可能与pg_class的索引有关。...这有助于提醒我们索引维护如何在数据库中产生工作负载,如果将未使用的索引从数据库中删除,将有助于提高性能。该函数的输出将有助于了解什么活动最能生成记录wal,并检测到一些异常或解释服务器行为。...例如索引维护活动的权重。将来,该扩展也许可以帮助我们审计和分析数据库工作流并产生漂亮有趣的报告。

    1.5K20

    【TBase开源版测评】轻松愉快去O选项:TBase

    部门的项目原先基于Oracle进行存储、DM层OLAP计算、后端接口访问,而Oracle只是单机+从库的部署方式,经过一段时间的使用,存储与性能都有捉襟见肘之处,另外也想节省成本,决定响应去O的大潮...,需要为每个分区子表维护索引,旧分区中的索引也不能自动继承。...索引创建 4个参数,分别为:1.主表名字;2.分区列(注意先后顺序,要带上分区列);3.需创建的历史分区数量,默认为全部历史分区(实际来看似乎是按4+n来计算的);4.类型,默认为btree => select..._20200809 USING btree (ds, id) run_maintenance_table ----------------------- 可以看到不管分区还是索引都创建了新的 =>...另外postgres比较严格,需要手动转换一些类型,在涉及到分区字段、shard字段、索引字段要注意类型准确性,否则查询时用cast或者::type转换都有损耗。

    2.3K30

    Postgresql表空间

    与数据库的关系 在 postgres 中,一个表空间可以让多个数据库使用,而一个数据库也可以使用多个表空间,属于“多对多”的关系; 在 oracle 中,一个表空间只属于一个数据库,而一个数据库可以使用多个表空间...例如,一个很频繁使用的索引可以被放在非常快并且非常可靠的磁盘上,如一种非常贵的固态设备。同时,一个很少使用的或者对性能要求不高的存储归档数据的表可以存储在一个便宜但比较慢的磁盘系统上。...能合理利用磁盘性能和空间,制定最优的物理存储方式来管理数据库表和索引 3、应用场景 1)存储磁盘没有空间时,可以使用表空间把数据存到其他地方: 如数据库一般装在root下,root相当于是一个磁盘分区,...2)利用表空间对数据库进行性能优化: 如频繁使用的数据表或者索引放在高性能的PMEM上,而较少使用的数据放在SSD上。...=# create table test(a int) tablespace tbs_test; CREATE TABLE tpcc=# create index ind on test using btree

    2.4K50

    EXPLAIN(ANALYZE)需要 BUFFERS 来改进 Postgres 查询优化过程

    1) 看 IO 任务完成详情 让我们考虑一个简单的例子 – 两个表,每个表有 2 个 bigint 列,id(顺序)和 num(随机),内容完全相同;第二个表在 num 上有一个索引,而第一个表没有索引...使用单列索引我们能做得更好吗?可以,但需要对表进行一些物理重组。num值是使用random()生成的,因此当执行器在执行Index Scan时找到索引项,它随后需要处理堆中的许多不同页面。...3、HOT 更新与索引扩增。...例如,如果您定期从生产中刷新数据,这是一个不错的举措,但您需要等待多长时间,如果您大幅更改了数据,需要多长时间才能进行另一个实验(换句话说,从头开始)?...2、此外,以 BUFFERS 为中心的方法可以从使用瘦克隆中受益匪浅。

    45610

    Postgresql源码(32)Btree索引分裂前后结构差异对比

    阅读顺序 《Postgresql源码(30)Postgresql索引基础B-linked-tree》 《Postgresql源码(31)Btree索引相关系统表和整体结构》 《Postgresql源码(...32)Btree索引分裂前后结构差异对比》 《Postgresql源码(33)Btree索引读——整体流程&_bt_first》 《Postgresql源码(34)Btree索引读——_bt_first...搜索部分分析》 《Postgresql源码(36)Btree索引读——_bt_next搜索部分分析》 总结 分析流程在后面,这里总结便于查询 场景一:root分裂为branch的前后对比(level1–...(id) 10000条integer索引结构 postgres=# insert into t4 select generate_series(1,10000), md5(random()::text...(btpo_flags=1) -- root分裂的两个branch元素数量:285个、262个 场景一:root分裂为branch的前后对比(level1–>2) 149370条记录时level从1

    73720

    PolarDB_PG 迁移至 OB_Oracle 的开源方案

    5.3.2 解决方法 将外键从表结构文件中提取并保存到其他文件。 方式一:若外键数量少,且关联的表数据量小,在迁移完数据之后可以直接进行创建,示例如下: ALTER TABLE $pg_user....5.5 基于 oid 创建的索引 5.5.1 问题描述 如下示例中,(oid): 表示索引是基于表的 oid 列创建的。...$table_name USING btree (oid) 5.5.2 解决方法 OceanBase 数据库中没有 oid 这种存储对象的唯一标识符,在 dbcat 转换完的文件中直接移除这一类索引。...5.6.2 解决方法 在 ob_oracle 目标端将 NUMBER(1) 替换为 CHAR(5) 以提高字段兼容性 程序代码需做调整,比如原本查询语句是: select id from table1...$table_name"], "jdbcUrl": ["jdbc:postgresql://10.186.64.61:5432/postgres

    94000

    Postgresql源码(28)Btree索引分裂前后结构差异对比

    阅读顺序 《Postgresql源码(30)Postgresql索引基础B-linked-tree》 《Postgresql源码(31)Btree索引相关系统表和整体结构》 《Postgresql源码(...32)Btree索引分裂前后结构差异对比》 《Postgresql源码(33)Btree索引读——整体流程&_bt_first》 《Postgresql源码(34)Btree索引读——_bt_first...搜索部分分析》 《Postgresql源码(36)Btree索引读——_bt_next搜索部分分析》 总结 分析流程在后面,这里总结便于查询 场景一:root分裂为branch的前后对比(level1–...(id) 10000条integer索引结构 postgres=# insert into t4 select generate_series(1,10000), md5(random()::text...(btpo_flags=1) -- root分裂的两个branch元素数量:285个、262个 场景一:root分裂为branch的前后对比(level1–>2) 149370条记录时level从1

    88620

    PostgreSQL JSONB 索引实践

    原文: https://www.crunchydata.com/blog/indexing-jsonb-in-postgres 在 Postgres 中索引 JSONB Postgres 的出色之处有很多...从检索的角度来看,如何充分利用 JSONB?Postgres 丰富的索引支持就是一个例证。 Postgres 索引类型 大多数数据库都只有一个标准的索引类型:B 树。...B 树是一种平衡树结构,也是你从计算机科学学位角度学习到的常见索引类型。当你制定标准时,CREATE INDEX会创建一个 B 树索引。这适用于以该值为目标的标准WHERE子句。...CREATE INDEX idx_orders_total ON orders (((details->>'order_total')::numeric)) 这将在 orders 表上创建一个btree...它的工作原理是,首先访问详细信息 JSONB 列,使用 ->> 运算符提取与 order_total 键关联的值作为文本,然后将该文本值转换为数字类型。

    13910

    技术分享 | MySQL 可以对相同字段创建不同索引?

    3测试三 从效果上看,这两个索引,保留一个即可,因为这两个索引只是名称不同,索引字段相同的,实际上就是相同的索引。...BTREE(UPDATED); 但对于主键和索引的这两个,需要用主键这个。...因为这两个最主要的区别就是主键除了包含索引外,还需保证唯一,而此处的索引,就是普通索引,不是唯一索引,因此从逻辑上,这两个是不等价。...但是如果是 Oracle,情况会是相同? Oracle 19c,在主键字段上创建索引,会提示 此列列表已索引 的错误。在相同字段上创建第二个索引,也是提示 此列列表已索引 的错误。...说明 Oracle 中根本不允许同一个字段存在两个相同索引的情况。 4总结 因此只能说不同的数据库,设计理念不同,Oracle 更严谨些,MySQL 的容错性鲁棒性更突出(可能不太准确)。

    1.1K40

    PostgreSQL18-RC1发布,这些改进值得关注

    转换为 x = ANY ... 以获得更好的优化器统计信息。...索引进行跳跃扫描:这使得仅对第二个或后续索引列进行等值引用的查询能够使用多列 Btree 索引。...允许非 Btree 唯一索引用作分区键和在物化视图中使用:索引类型仍必须支持相等性。允许并行创建 GIN 索引。...允许对值进行排序,以加快范围类型的 GiST 和 btree 索引构建添加 异步I/O 子系统:此功能允许后端对多个读取请求进行排队,从而实现更高效的顺序扫描、位图堆扫描、清理等操作。...允许对值进行排序以加快 btree_gist 索引的构建添加 amcheck 检查函数 gin_index_check() 以验证 GIN 索引添加函数 pg_buffercache_evict_relation

    67210
    领券