openGauss Officially Releases Version 1.0.1

openGauss2020-10-12theme

After the joint efforts of community contributors, openGauss officially released version 1.0.1 on October 12! The new version has introduced 20+ bright new features, such as automatic expansion of partition table, materialized view, incremental backup/restore, logical copy, foreign key, etc.

Since the official open source on June 30 for three months, community contributors have actively participated in the openGauss community. The cumulative number of PR submissions has reached 1000+ and the cumulative number of commit has reached 1500+; At the same time, openGauss ushered in the commercial distribution of six partners, such as HaiLiangShuJu, YunHeEnMo, ShenZhouTongYong, XuGuWeiYe, DongHuaRuanjian, RenDaJinCang, etc. The partners quickly promoted the commercial landing of openGauss.

Download and experience openGauss version 1.0.1!

https://opengauss.org/en/download.html

New Features

openGauss 1.0.1 is positioned as the update version, which is compatible with the features of the original 1.0.0 version. The new features are as follows:

  • XML Type

Stores XML data. The advantage of storing XML data in a text type is that it can check the input value for structural goodness, and it also supports type safety checks on functions. To use this data type, you must use configure –with-libxml during compilation.

  • Pseudo-column ROWNUM

Generates a sequence number for each row in the query result. The sequence numbers must be unique. When using the ROWNUM function, you must use the OVER clause to sort a column to generate sequence numbers.

  • MEDIAN Aggregate Function

Returns the median value of a given value. The median value is in the middle of a group of values. If the parameter set contains an even number of numbers, MEDIAN returns the average value of the two numbers in the middle.

  • Global Temporary Table

Temporary tables need to be created only once for each database. Global temporary table objects are stored in the data dictionary. A temporary table is used to store intermediate result sets of transactions or sessions. The data stored in a temporary table is visible only to the current session. Even if the current session has committed data, other sessions cannot see the data. A temporary table can be used for sessions. Data can still exist in a temporary table even after the data is committed. However, the data is lost after the temporary table is disconnected and then reconnected. A temporary table can also be used for transactions. After the transaction is submitted, the data disappears.

  • Foreign Table

The data of foreign tables does not exist in the database. By providing the database with metadata that describes foreign tables, you can treat an operating system file or foreign data source as a database table and access it as if it were stored in a common database table. A foreign table is an extension of a database table. The foreign data wrapper (FDW) plug-in allows users to access tables of other heterogeneous databases in openGauss. openGauss supports FDW for Oracle (oracle_fdw), FDW for MySQL (mysql_fdw), and FDW for PostgreSQL (Postgres_fdw), allowing users to access other heterogeneous databases in openGauss. To use these plug-ins, you need to install the client package of the corresponding database, recompile openGauss, and configure enable_mysql_fdw and enable_oracle_fdw. After the database is started, run the create extension command to create an extension component, run the create server command to configure heterogeneous database connection parameters, run the create user mapping command to create a heterogeneous user mapping, and run the CREATE FOREIGN TABLE command to create a foreign table of a specified database.

  • Materialized View

A local copy of the database query result data, which stores data based on data tables. It can also be called a snapshot. In a relational database, a common view is a virtual table that stores only SQL statements. A materialized view caches the query result of the view to a concrete or materialized table to store the actual data. Materialized views are used to pre-compute and save the results of time-consuming operations such as table join or aggregation. In this way, these time-consuming operations can be avoided during query execution, and results can be quickly obtained. The materialized view uses the query rewrite mechanism and does not require the modification of original query statements. The engine automatically selects a proper materialized view to rewrite the query, which is transparent to applications.

  • Foreign Key

Represents a correlation between two relationships. A table that uses the foreign key of another relationship as the primary keyword is called the primary table. A table that has the foreign key is called the secondary table of the primary table. The foreign key establishes a referential integrity constraint between the primary table and the secondary table.

  • UPSERT (INSERT ON CONFLICT DO)

When a constraint error occurs during data insertion, the system directly returns the error or executes the UPDATE statement.

  • Commit in a Stored Procedure, Independent Debugging, and Parentheses Omission

You camn commit data in batches to ensure data reliability in a stored procedure. You can set breakpoints and perform independent debugging. Stored procedure debugging is a debugging method. During the development of a stored procedure, you can trace the process executed by the stored procedure step by step and find the error cause or program bug based on the variable value to improve the fault locating efficiency.

  • Autonomous Transaction

Allows you to create a “transaction in a transaction” that can be committed or rolled back independently of its parent transaction. With autonomous transactions, you can start a new transaction, complete some work, and then commit or roll back, all of which do not affect the state of the currently executed transaction. For details about autonomous transaction constraints, see the description of autonomous transactions in the specification constraints.

  • Keyword Alias

Keywords such as name, value, and type are used as the aliases of query result columns.

  • Logical Replication

In logical replication, the primary database is called the source database, and the standby database is called the objective database. The source database parses the WAL file based on the specified logical parsing rule and parses the DML operation into certain logical change information (standard SQL statements). The source database sends standard SQL statements to the objective database. After receiving the SQL statements, the objective database applies them to implement data synchronization. Logical replication involves only DML operations. Logical replication can implement cross-version replication, heterogeneous database replication, dual-write database replication, and table-level replication.

  • Incremental Backup and Restoration (beta)

Supports full backup and incremental backup of the database, manages backup data, and views the backup status. Supports combination of incremental backups and deletion of expired backups.

The database server dynamically tracks page modifications, and when a relational page is updated, the page is marked for backup. To use the incremental backup function, you need to enable the GUC parameter enable_cbm_tracking and allow the server to track the page modifications.

  • Point-in-time Recovery (PITR)

Uses basic hot backup, write-ahead logs (WALs), and archived WALs for backup and recovery. When replay a WAL record, you can stop at any point in time, so that there is a snapshot of the consistent database at any point in time. That is, you can restore the database to the state at any time since the backup starts. During recovery, you can specify the recovery stop point as TID, time, and LSN.

  • Standby Node in Replay Mode

The primary and standby nodes support the remote_apply mode. In remote_apply mode, the primary node returns to the application only after the redo logs of the standby node are restored.

  • Global Partitioned Indexes

A global index is an independent index created on the entire table. If the query references a non-partition column, the performance can be improved.

  • Automatic Extended Partition Based on Range Partitions

The INTERVAL partition is a function extension of the range partitions. For range partitions of continuous data types, if the new data value inserted does not match the current partition, the Interval-Partition feature can be used to automatically create partitions. The partition column must be of the integer or time type.

  • Parallel Query (beta)

Supports the parallel scanning operator, and optimizes the execution mode of SQL statements. The single-thread mode that uses a single CPU at most is improved to the multi-thread mode that completes the work collaboratively. Parallel query consumes more hardware resources, but greatly improves the task execution efficiency.

  • OS Platform

Supports openEuler 20.3 LTS on x86-64 and Kirin V10 on Arm. It can run on openEuler and CentOS containers.

  • ALTER SYSTEM SET Syntax

Modifies values of database instance parameters in a session. After the database is reconnected or restarted, the parameters can be successfully modified and written into the postgresql.conf and postgresql.conf.bak configuration files.

  • IPv6 Protocol

The database can be connected using the IPv6 protocol.

  • PostGIS Plug-in

PostGIS is a spatial database that supports geographic objects, uses the point, line, and plane data types, and allows spatial relationship location query in SQL. Before using this function, you need to install the PostGIS plug-in.

  • GIN Index

A common inverted index, which is a data structure for storing a set. GIN indexes are suitable for multivalued element searches, such as array and full-text searches.

  • Stored Procedure Debugging

By installing the pldebuger plug-in, you can debug the SQL statements of functions and stored procedures.

  • Standby Node Scale-out

Supports the standby node scale-out in the database cluster using tools. A standalone or primary/standby database can be scaled to a maximum of one primary and four standbys.

  • Automatic Workload Diagnosis Report (WDR)

Generates a performance report between two different time points based on the system performance snapshot data at these time points. The report is used to diagnose database kernel performance faults.

  • Supports transaction-level synchronization of heterogeneous databases (only DML).

  • Container-based deployment (alpha)

Provides the container-based deployment capability for single-node databases. A script is used to build the Docker image of the database. After the image is started, you can deploy and run the single-node database in container mode.

Special thanks to the community contributors who participated in openGauss version 1.0.1. At the same time, welcome more contributors to join us to prosper the openGauss open source community.

Contributors (Gitee Account)

Adoube_548,anikikong,bertliu,big_pig_123,bosihouzi,bowen9799,buter, catofpei,chen_chenn,chendong76,chenlinfeng3,chennaidong,chenxiaobin19, chenzang,chunlei007,code_wolf,cylfsbm,cyw-0-ng,ddwolf,dikk123,emmajiang, enbokang,ericwangpeng,fss567,gauss__gaoshi,gentle_hu,giteegauss,gongsiyi150, gwchengcheng,gyt0221,hemny,hljhnu,hongyehongye1,houjhibofa,hthinks, huangchengcheng1,I-am-a-robot,initlove,jcc123,jeffee,jia_junfeng1, jiang_jianyu,jiangxiangbo,jie_lei,jimmyhujiming,jin_li,jinyu_opengauss, jixi_hexi,johnnyzhou,justbk,kamusis,lazpf,lee1002,lesliexx,li_jianqiu, liang_-123,liangweii,li-jun056,like11,lilexun,linianA,lishifu_db,liumin35, liushengxi,liyang0608,lizhenfeng123,ljiot,llzx373,lmte3e4,looplocked, lqkitten,luo_zihao5524,luohongbins,luyao201,lvmiao1229,ma_xiaodi,matrix0xcc, meimeidtt,nanmu2018,nifinity,nonolili527,nwen_hw,open__gs__2020,opgauss, panchenbo,pikeTWG,pku__lisihao,popastin,qin-wei,RayH2020,realzhouqingqing, reganhe_xx,romber,s36326,scarbor_fair,seulingfeng,shaga,shenyuflying, sqyyeah,stanleyren,sun_madman,sun_xu_zong,sword-fairy-water-easy, templingfeng,thexiong7,tomas__junny,tonyhehe,totaj,toyato,trollzhao, tuohai666,vastbase_yzhang,victor-zhc,vinothv,wang_pei_heng,wangdengke6, wangrui_rui,wang-tq,wangxinlian,wangzhijun2018,weim-123,willemjiang, wjzeng,wn952000,wotchin,wustczx,wuyuechuan,xiangxinyong,xiezhipeng1, xiliu_h,xinmiaomiao,xiong_xjun,xixicat,xukunpeng,xzx666,xzyinyong, y1309639,yangkang52,yansong_lee,yidianjiujin,yinzhishu,ylfan96, you-and-me,yujiangaaa,yukai_k,yutang1,yuzhenglin,yz_db,zbxue,zha_hw, zhang_xubo,zhangxiaohai928,zhangzhijingMY,zheng_zelin,zhengyuhanghans, zhongjun2,zhouxiongjia,zhouzhishan,zhu_jinwei,zilf,zju_hzd,zp123456,zzcyd,zzzzzdb

Welcome to the openGauss community code repository and submit an issue for your suggestions on the new version.

openGauss repository: https://gitee.com/opengauss

openGauss mirror repository: https://github.com/opengauss-mirror