关于postgresql:postgresql-copy-消息

简略查问两个非凡的copy的返回值https://www.postgresql.org/do... CopyInResponseThe backend is ready to copy data from the frontend to a table; see Section 52.2.5.CopyOutResponseThe backend is ready to copy data from a table to the frontend; see Section 52.2.5.copy 相干音讯 CommandComplete (B)Byte1('C')Identifies the message as a command-completed response.其中:StringFor a COPY command, the tag is COPY rows where rows is the number of rows copied. (Note: the row count appears only in PostgreSQL 8.2 and later.)CopyData (F & B)Byte1('d')Identifies the message as COPY data.CopyDone (F & B)Byte1('c')Identifies the message as a COPY-complete indicator.CopyFail (F)Byte1('f')Identifies the message as a COPY-failure indicator.CopyInResponse (B)Byte1('G')Identifies the message as a Start Copy In response. The frontend must now send copy-in data (if not prepared to do so, send a CopyFail message).CopyOutResponse (B)Byte1('H')Identifies the message as a Start Copy Out response. This message will be followed by copy-out data.CopyBothResponse (B)Byte1('W')Identifies the message as a Start Copy Both response. This message is used only for Streaming Replication.copy to file ...

June 21, 2021 · 1 min · jiezi

关于postgresql:ORACLE-和PostgreSQL继承表类似的实现方式

昨天介绍了PostgreSQL里的继承表,明天来持续探讨ORACLE数据库里有没有相似的货色。 首先,能够明确的说,ORACLE数据库里没有继承表这种OBJECT。然而,和PostgreSQL的继承表相似,不同Table的数据以某种形式进行关联,共享存储空间的角度来讲,ORACLE数据库也存在这样的OBJECT。 那就是CLUSTER。 首先,ORACLE数据库对“CLUSTER”是这样定义的: CREATE CLUSTER (oracle.com)A cluster is a schema object that contains data from one or more tables.上面咱们来看看CLUSTER是怎么利用的。 --做成CLUSTERSQL> conn test/test@localhost:1521/pdb接続されました。SQL> CREATE CLUSTER object (object VARCHAR2(23))SIZE 512STORAGE (initial 100K next 50K); 2 3 4クラスタが作成されました。--为CLUSTR做一个索引SQL> CREATE INDEX idx_object ON CLUSTER object;索引が作成されました。--做成应用CLUSTER的第一个表SQL> CREATE TABLE object_table CLUSTER object (OBJECT_TYPE) AS SELECT * FROM dba_objects WHERE OBJECT_TYPE = 'TABLE'; 2 3表が作成されました。--做成应用CLUSTER的第二个表SQL> CREATE TABLE object_index CLUSTER object (OBJECT_TYPE) AS SELECT * FROM dba_objects WHERE OBJECT_TYPE = 'INDEX'; 2 3表が作成されました。--确认一下两个表的状态和定义SQL> select count(*) from object_index; COUNT(*)---------- 2898SQL> select count(*) from object_table; COUNT(*)---------- 2223SQL> @objobject_nameに値を入力してください: object_index旧 1: select owner,object_name,object_type from dba_objects where object_name like upper('&object_name')新 1: select owner,object_name,object_type from dba_objects where object_name like upper('object_index')OWNER OBJECT_NAME OBJECT_TYPE-------------------- -------------------------------------------------- -----------------------TEST OBJECT_INDEX TABLESQL> @objobject_nameに値を入力してください: object_table旧 1: select owner,object_name,object_type from dba_objects where object_name like upper('&object_name')新 1: select owner,object_name,object_type from dba_objects where object_name like upper('object_table')OWNER OBJECT_NAME OBJECT_TYPE-------------------- -------------------------------------------------- -----------------------TEST OBJECT_TABLE TABLESQL> @ddlobject_typeに値を入力してください: TABLEobject_nameに値を入力してください: OBJECT_INDEXownerに値を入力してください: TEST旧 1: select dbms_metadata.get_ddl('&object_type','&object_name','&owner') from dual新 1: select dbms_metadata.get_ddl('TABLE','OBJECT_INDEX','TEST') from dualDBMS_METADATA.GET_DDL('TABLE','OBJECT_INDEX','TEST')-------------------------------------------------------------------------------- CREATE TABLE "TEST"."OBJECT_INDEX" ( "OWNER" VARCHAR2(128), "OBJECT_NAME" VARCHAR2(128), "SUBOBJECT_NAME" VARCHAR2(128), "OBJECT_ID" NUMBER, "DATA_OBJECT_ID" NUMBER, "OBJECT_TYPE" VARCHAR2(23), "CREATED" DATE, "LAST_DDL_TIME" DATE, "TIMESTAMP" VARCHAR2(19), "STATUS" VARCHAR2(7), "TEMPORARY" VARCHAR2(1), "GENERATED" VARCHAR2(1), "SECONDARY" VARCHAR2(1), "NAMESPACE" NUMBER, "EDITION_NAME" VARCHAR2(128), "SHARING" VARCHAR2(18), "EDITIONABLE" VARCHAR2(1), "ORACLE_MAINTAINED" VARCHAR2(1), "APPLICATION" VARCHAR2(1), "DEFAULT_COLLATION" VARCHAR2(100), "DUPLICATED" VARCHAR2(1), "SHARDED" VARCHAR2(1), "CREATED_APPID" NUMBER, "CREATED_VSNID" NUMBER, "MODIFIED_APPID" NUMBER, "MODIFIED_VSNID" NUMBER ) CLUSTER "TEST"."OBJECT" ("OBJECT_TYPE")SQL> @ddlobject_typeに値を入力してください: TABLEobject_nameに値を入力してください: OBJECT_TABLEownerに値を入力してください: TEST旧 1: select dbms_metadata.get_ddl('&object_type','&object_name','&owner') from dual新 1: select dbms_metadata.get_ddl('TABLE','OBJECT_TABLE','TEST') from dualDBMS_METADATA.GET_DDL('TABLE','OBJECT_TABLE','TEST')-------------------------------------------------------------------------------- CREATE TABLE "TEST"."OBJECT_TABLE" ( "OWNER" VARCHAR2(128), "OBJECT_NAME" VARCHAR2(128), "SUBOBJECT_NAME" VARCHAR2(128), "OBJECT_ID" NUMBER, "DATA_OBJECT_ID" NUMBER, "OBJECT_TYPE" VARCHAR2(23), "CREATED" DATE, "LAST_DDL_TIME" DATE, "TIMESTAMP" VARCHAR2(19), "STATUS" VARCHAR2(7), "TEMPORARY" VARCHAR2(1), "GENERATED" VARCHAR2(1), "SECONDARY" VARCHAR2(1), "NAMESPACE" NUMBER, "EDITION_NAME" VARCHAR2(128), "SHARING" VARCHAR2(18), "EDITIONABLE" VARCHAR2(1), "ORACLE_MAINTAINED" VARCHAR2(1), "APPLICATION" VARCHAR2(1), "DEFAULT_COLLATION" VARCHAR2(100), "DUPLICATED" VARCHAR2(1), "SHARDED" VARCHAR2(1), "CREATED_APPID" NUMBER, "CREATED_VSNID" NUMBER, "MODIFIED_APPID" NUMBER, "MODIFIED_VSNID" NUMBER ) CLUSTER "TEST"."OBJECT" ("OBJECT_TYPE")--确认一下两个表的存储状况col OWNER for a10col SEGMENT_NAME for a20col SEGMENT_TYPE for a18col SEGMENT_SUBTYPE for a10col TABLESPACE_NAME for a10col RETENTION for a7set lin 200 pages 999select OWNER,SEGMENT_NAME,SEGMENT_TYPE,SEGMENT_SUBTYPE,TABLESPACE_NAME,HEADER_FILE,HEADER_BLOCK,BLOCKS,EXTENTS,RETENTION from dba_segments where OWNER='TEST';OWNER SEGMENT_NAME SEGMENT_TYPE SEGMENT_SU TABLESPACE HEADER_FILE HEADER_BLOCK BLOCKS EXTENTS RETENTI---------- -------------------- ------------------ ---------- ---------- ----------- ------------ ---------- ---------- -------TEST OBJECT CLUSTER ASSM USERS 12 130 96 12TEST IDX_OBJECT INDEX ASSM USERS 12 146 8 1OK,曾经能够确认到应用CLUSTER的两张表的确共享了存储空间。 ...

June 18, 2021 · 2 min · jiezi

关于postgresql:PostgreSQL-密码验证功能增强

明码验证介绍 passwordcheck 模块是在 CREATE ROLE 或者 CREATE USER 期间检查用户明码是否合乎指定的规定模块如果明码比拟弱,那么在此期间将会拒绝执行明码并返回一个谬误。 该模块位于 srcpkg/contrib 目录下,装置后位于 $libdir 目录下,应用 shared_preload_libraries加载并重新启动服务器后失效。在该模块中,次要有两个规定判断,一个是用户名本身的判断,一个是明码长度少于8位的判断,一个是对是否蕴含用户名自身的判断。 明码验证加强性能明码验证加强性能次要是在原有明码查看模块的根底上,减少了对明码中是否蕴含至多一个大小写字母,一个数字和一个特殊字符的判断。 实现/*------------------------------------------------------------------------- * * passwordcheck_enchance.c * * Author: Sungsasong * * IDENTIFICATION * contrib/passwordcheck_enhance/passwordcheck_enhance.c * *------------------------------------------------------------------------- */#include "postgres.h"#include <ctype.h>#ifdef USE_CRACKLIB#include <crack.h>#endif#include "commands/user.h"#include "catalog/namespace.h"#include "libpq/crypt.h"#include "fmgr.h"#include "utils/guc.h"#if PG_VERSION_NUM < 100000#include "libpq/md5.h"#endifPG_MODULE_MAGIC;/* passwords shorter than this will be rejected */#define MIN_PWD_LENGTH 8#define MIN_UPPER_LETTER 1#define MIN_LOWER_LETTER 1#define MIN_DIGIT_CHAR 1#define MIN_SPECIAL_CHAR 1extern void _PG_init(void);/********************************************************************** *Function:passwordcheck_enhance * *Verifying the password at least need contains one upper letter,lower* *letter,digit and specital character * *********************************************************************/#if PG_VERSION_NUM >= 100000 static void check_password(const char *username, const char *shadow_pass, PasswordType password_type, Datum validuntil_time, bool validuntil_null) { if(password_type != PASSWORD_TYPE_PLAINTEXT) { /* * Unfortunately we cannot perform exhaustive checks on encrypted * passwords - we are restricted to guessing. (Alternatively, we could * insist on the password being presented non-encrypted, but that has * its own security disadvantages.) * * We only check for username = password. */ char *logdetail; if(plain_crypt_verify(username, shadow_pass, username,&logdetail)== STATUS_OK) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("password must not contain user name"))); }else { /* * For unencrypted passwords we can perform better checks */ const char *password = shadow_pass; int pwdlen = strlen(password); int i; // bool pwd_has_letter, // pwd_has_nonletter; int PWD_UPPER_LETTER_COUNT = 0; int PWD_LOWER_LETTER_COUNT = 0;int PWD_SPECIAL_CHAR_COUNT = 0; int PWD_DIGIT_COUNT = 0; int PWD_CONTAINS_LETTER_COUNT = 0; //如果满足至多8位明码的条件,那么判断明码中是否蕴含至多一个大小写字母和特殊字符for(i = 0; i < pwdlen; i++) { /* enforce minimum length */ if(pwdlen < MIN_PWD_LENGTH) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("明码长度至多须要 %d 位,并且至多须要蕴含一个大小写字母和特殊字符 ",MIN_PWD_LENGTH))); } //判断是否蕴含字母if(isalpha((unsigned char) password[i])) { PWD_CONTAINS_LETTER_COUNT++; if(islower((unsigned char) password[i])) { PWD_LOWER_LETTER_COUNT++; }else if(isupper((unsigned char) password[i])) { PWD_UPPER_LETTER_COUNT++; } }else if(isdigit((unsigned char) password[i])) { PWD_DIGIT_COUNT++; }else { PWD_SPECIAL_CHAR_COUNT++; } } //判断是否至多蕴含了一个数字,大小写字母和特殊字符 if(PWD_LOWER_LETTER_COUNT < MIN_LOWER_LETTER) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("明码至多须要蕴含 %d 个小写字母", MIN_LOWER_LETTER))); }else if(PWD_UPPER_LETTER_COUNT < MIN_UPPER_LETTER) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("明码至多须要蕴含 %d 个大写字母", MIN_UPPER_LETTER))); }else if(PWD_DIGIT_COUNT < MIN_DIGIT_CHAR) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("明码至多须要蕴含 %d 个数字", MIN_DIGIT_CHAR))); }else if(PWD_SPECIAL_CHAR_COUNT < MIN_SPECIAL_CHAR) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("明码至多须要蕴含 %d 个特殊字符", MIN_DIGIT_CHAR))); } /* check if the password contains the username */ if (strstr(password, username)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("明码不能与用户名同名"))); } } /* all checks passed, password is ok */ }#else static void check_password(const char *username, const char *password, int password_type, Datum validuntil_time, bool validuntil_null) { int namelen = strlen(username); int pwdlen = strlen(password); char encrypted[MD5_PASSWD_LEN + 1]; int i; bool pwd_has_letter, pwd_has_nonletter; int PWD_UPPER_LETTER_COUNT = 0; int PWD_LOWER_LETTER_COUNT = 0; int PWD_SPECIAL_CHAR_COUNT = 0; int PWD_DIGIT_COUNT = 0; int PWD_CONTAINS_LETTER_COUNT = 0; switch (password_type) { case PASSWORD_TYPE_MD5: /* * Unfortunately we cannot perform exhaustive checks on encrypted * passwords - we are restricted to guessing. (Alternatively, we * could insist on the password being presented non-encrypted, but * that has its own security disadvantages.) * * We only check for username = password. */ if (!pg_md5_encrypt(username, username, namelen, encrypted)) { elog(ERROR, "password encryption failed"); } if (strcmp(password, encrypted) == 0) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("password must not contain user name"))); } break; case PASSWORD_TYPE_PLAINTEXT: /* * For unencrypted passwords we can perform better checks */ /* enforce minimum length */ //如果满足至多8位明码的条件,那么判断明码中是否蕴含至多一个大小写字母和特殊字符 for(i = 0; i < pwdlen; i++) { /* enforce minimum length */ if(pwdlen < MIN_PWD_LENGTH) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("明码长度至多须要 %d 位,并且至多须要蕴含一个大小写字母和特殊字符 ",MIN_PWD_LENGTH))); } //判断是否蕴含字母 if(isalpha((unsigned char) password[i])) { PWD_CONTAINS_LETTER_COUNT++; if(islower((unsigned char) password[i])) { PWD_LOWER_LETTER_COUNT++; }else if(isupper((unsigned char) password[i])) { PWD_UPPER_LETTER_COUNT++; } }else if(isdigit((unsigned char) password[i])) { PWD_DIGIT_COUNT++; }else { PWD_SPECIAL_CHAR_COUNT++; } } //判断是否至多蕴含了一个数字,大小写字母和特殊字符 if(PWD_LOWER_LETTER_COUNT < MIN_LOWER_LETTER) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("明码至多须要蕴含 %d 个小写字母", MIN_LOWER_LETTER))); }else if(PWD_UPPER_LETTER_COUNT < MIN_UPPER_LETTER) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("明码至多须要蕴含 %d 个大写字母", MIN_UPPER_LETTER))); }else if(PWD_DIGIT_COUNT < MIN_DIGIT_CHAR) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("明码至多须要蕴含 %d 个数字", MIN_DIGIT_CHAR))); }else if(PWD_SPECIAL_CHAR_COUNT < MIN_SPECIAL_CHAR) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("明码至多须要蕴含 %d 个特殊字符", MIN_DIGIT_CHAR))); } /* check if the password contains the username */ if (strstr(password, username)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("明码不能与用户名同名"))); } break; default: elog(ERROR, "unrecognized password type: %d", password_type); break; } /* all checks passed, password is ok */ }#endif/* * Module initialization function */void_PG_init(void){ /* activate password checks when the module is loaded */ check_password_hook = check_password;}取得源码[passwordcheck_enhance](https://github.com/DeveloperHonor/passwordkcheck-enhance-for-postgresql.git "passwordcheck_enhance module")装置 *下载源码文件并传入到 PostgreSQL 源码包 contrib 目录下* *解压下载的源码包文件* `[postgres@sungsasong contrib]$ unzip passwordkcheck-enhance-for-postgresql-main` *切换到解压目录* *执行 make && make install* *在 $PGDATA/postgresql.auto.conf或者 $PGDATA/postgresql.conf文件中退出如下* `shared_preload_libraries = 'passwordcheck_enhance` *重新启动 PostgreSQL 服务器*验证 ...

June 17, 2021 · 4 min · jiezi

关于postgresql:PostgreSQL-表的继承

这几天学习了一下PostgreSQL数据库,从装置到简略的应用都平平淡淡,然而上面的这个性能还是给了我一点小惊喜。 表的继承简略来说就是能够用继承的办法把一张表的列和数据传递给另一张表,子表能够比父表列多的一种构造。 上面用一个小例子来理解一下。 --创立父表并插入两条数据mydb=# create table father_table(c1 integer,c2 varchar(10));CREATE TABLEmydb=# insert into father_table values(1,'101');INSERT 0 1mydb=# insert into father_table values(2,'201');INSERT 0 1 --创立子表并插入两条数据mydb=# create table child_table(c3 varchar(10)) inherits (father_table);CREATE TABLEmydb=# insert into child_table values(3,'301','302');INSERT 0 1mydb=# insert into child_table values(4,'401','402');INSERT 0 1 --查看父表构造 mydb=# \d father_table Table "public.father_table"ColumnTypeCollationNullableDefaultc1integer c2character varying(10) Number of child tables: 1 (Use \d+ to list them.) --查看子表构造 mydb=# \d child_table Table "public.child_table"ColumnTypeCollationNullableDefaultc1integer c2character varying(10) c3character varying(10) Inherits: father_table ...

June 17, 2021 · 1 min · jiezi

关于postgresql:PostgreSQL数据库加密选项

参考翻译自https://www.postgresql.org/docs/12/encryption-options.html 18.8. 加密选项PostgreSQL提供了多个级别的加密,并提供了灵活性,能够避免因为数据库服务器偷盗,不道德的管理员和不平安的网络而导致数据泄露。还可能用加密来爱护敏感数据,例如病历或财务交易。 明码加密数据库中的用户明码以哈希值的形式贮存(由设置password_encryption选项决定), 因而管理员无奈确定调配给用户的理论明码. 如果将SCRAM或MD5加密用于客户端身份验证, 未加密的明码永远不会长期呈现在服务器上,因为客户端会在通过网络发送之前对其进行加密. 举荐用SCRAM, 因为它是Internet规范,并且比PostgreSQL特定的MD5身份验证协定更平安。 特定列的加密pgcrypto模块容许某些字段被加密存储。如果只有一些数据是敏感的,这将很有用。客户端提供解密密钥,数据在服务器上解密,而后发送到客户端。 解密的数据和解密密钥会在客户端和服务器之间进行解密和通信时,短暂地呈现在服务器上。这在这短暂的时刻数据和密钥能够被某个领有对数据服务器齐全拜访权的人截获,比方零碎的管理员。 数据分区加密能够在文件系统级别或块级别执行存储加密。Linux文件系统加密选项包含eCryptfs和EncFS,而FreeBSD应用PEFS。块级或全盘加密选项包含Linux上的dm-crypt + LUKS和FreeBSD上的GEOM模块geli和gbde。许多其余操作系统也反对此性能,包含Windows。 如果驱动器或整个计算机被盗,此机制可避免从驱动器中读取未加密的数据。这在文件系统挂载时无奈避免攻打,因为在文件系统挂载时,操作系统会提供未加密的数据视图。然而,要挂载文件系统,您须要某种形式将加密密钥传递给操作系统,有时密钥会存储在挂载磁盘的主机上的某个地位。 网络数据加密SSL连贯会加密通过网络发送的所有数据:明码,查问和返回的数据。pg_hba.conf文件容许管理员指定哪些主机能够应用非加密连贯(host),哪些主机须要SSL加密的连贯(hostssl)。此外,客户端能够指定仅通过SSL连贯到服务器。 GSSAPI加密的连贯对通过网络发送的所有数据进行加密,包含查问和返回的数据。(没有明码通过网络发送。)pg_hba.conf文件容许管理员指定哪些主机能够应用非加密连贯(host),哪些主机须要GSSAPI加密的连贯(hostgssenc)。此外,客户端能够指定仅通过GSSAPI加密的连贯连贯到服务器(gssencmode = require)。 Stunnel或SSH也能够用于加密传输。 SSL主机认证客户端和服务器都能够互相提供SSL证书。它须要在每一侧进行一些额定的配置,然而与仅应用明码相比,它提供了更弱小的身份验证。它能够避免计算机伪装成为服务器的工夫足够长,所以无奈读取客户端发送的明码。它还有助于避免“中间人”攻打,即客户端和服务器之间的计算机假冒服务器,并在客户端和服务器之间读取和传递所有数据。 客户端加密如果无奈信赖服务器计算机的系统管理员,则客户端必须对数据进行加密;这样,未加密的数据就永远不会呈现在数据库服务器上。数据在发送到服务器之前先在客户端上加密,并且数据库后果在应用前必须在客户端上解密。

May 17, 2021 · 1 min · jiezi

关于postgresql:postgresql-fdw-安装使用

本地编译装置fdw插件 cd contrib/postgres_fdwUSE_PGX=1 make install本地装置extension postgres=# create extension if not exists postgres_fdw;CREATE EXTENSIONpostgres=# \dx List of installed extensions Name | Version | Schema | Description--------------+---------+------------+---------------------------------------------------- plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language postgres_fdw | 1.0 | public | foreign-data wrapper for remote PostgreSQL servers(2 rows)本地配置server postgres=# create server postgres_fdwtest FOREIGN data wrapper postgres_fdw OPTIONS(host '127.0.0.1', port '5432', dbname 'postgres');CREATE SERVERpostgres=# create user mapping for postgres server postgres_fdwtest options(user 'postgres',password 'postgres');CREATE USER MAPPING本地建表面 ...

April 22, 2021 · 1 min · jiezi

关于postgresql:Centos-安装-postgresql

增加 Yum 源拜访 https://www.postgresql.org/download 抉择操作 postgresql 版本及对应的操作系统,从生成装置脚本中抉择 rpm 源。 执行装置命令# Install the repository RPM:sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm# Install PostgreSQL:sudo yum install postgresql13-server -y# Optionally initialize the database and enable automatic start:sudo /usr/pgsql-13/bin/postgresql-13-setup initdbsudo systemctl enable postgresql-13sudo systemctl start postgresql-13设置环境变量vim ~/.bashrcexport PATH=$PATH:/usr/pgsql-13/bin登录$ su postgres$ psql

March 27, 2021 · 1 min · jiezi

关于postgresql:Docker-环境下使用-prometheus-grafana-监听-postgresql

效果图 环境筹备筹备好 docker 环境,包含 docker-compose。这里间接应用已制作好的 docker-compose 配置文件。 $ mkdir docker-composes$ git clone https://github.com/docker-composes/postgres.git$ git clone https://github.com/docker-composes/grafana.git$ git clone https://github.com/docker-composes/prometheus.git注:下文操作皆从 docker-composes 目录登程。容器配置postgres exporter 配置vim postgres/exporter/docker-compose.yml将 postgres 数据库连贯信息设置为 DATA_SOURCE_NAME 环境变量。如果是同网络下容器,以容器名称作为 host,如此处应用同网络(local-net)下容器 postgres-singleton。 DATA_SOURCE_NAME=postgresql://root:123456@postgres-singleton:5432/postgres?sslmode=disableprometheus.ymlvim prometheus/singleton/config/prometheus.yml在 scrape_configs 作用域下增加: # Postgres - job_name: 'postgres' static_configs: - targets: ['postgres-exporter-singleton:9187'] labels: instance: 'postgres-01' platform: 'ec2'启动容器$ docker network create local-net$ cd grafana && docker-compose up -d $ cd prometheus/signleton && docker-compose up -d $ cd postgres/signleton && docker-compose up -d$ cd postgres/expoter && docker-compose up -d配置 grafana拜访 http://localhost:3000。 ...

March 10, 2021 · 1 min · jiezi

关于postgresql:PostgreSQL

解析器:查问已有解析器postgres=# \dFpRefs: 解析器 -- 官网文档中文翻译extensions(扩大):查看数据库已装置的扩大:postgres=# \dx# Output:# Name | Version | Schema | Description# ----------+---------+------------+---------------------------------------------------------------------# plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language# postgis | 2.4.6 | public | PostGIS geometry, geography, and raster spatial types and functions# zhparser | 2.1 | public | a parser for full-text search of Chinese# (3 rows)# 或者postgres=# SELECT * FROM pg_extension;# 输入跟下面有点 \dx 有点不同.查看数据库可装置的扩大:postgres=# select * from pg_available_extensions;# Output:# name | default_version | installed_version | comment# ------------------------------+-----------------+-------------------+---------------------------------------------------------------------------------------------------------------------# refint | 1.0 | | functions for implementing referential integrity (obsolete)# postgis | 2.4.6 | 2.4.6 | PostGIS geometry, geography, and raster spatial types and functionsRefs: ...

February 23, 2021 · 1 min · jiezi

关于postgresql:干货丨时序数据库DolphinDB与Aliyun-HybridDB-for-PostgreSQL在金融数据集上的比较

1. 概述DolphinDB 是一款高性能混合列式数据库和数据分析系统,尤其善于解决工夫序列数据。Aliyun HybridDB for PostgreSQL(以下简称HybridDB)是由阿里巴巴提供的基于开源Greenplum定制的MPP架构企业级通用数据仓库产品。 在本报告中,咱们对DolphinDB和HybridDB,在工夫序列数据集上进行了性能比照测试。测试涵盖了CSV文件的加载、单个查问的执行、并发查问的执行等三方面。在咱们进行的所有测试中,DolphinDB均体现得更杰出,次要论断如下: 在加载数据的测试中,DolphinDB的速度是HybridDB的3倍在查问的测试中,DolphinDB的速度当先HybridDB约1~2个数量级在并发查问的测试中,DolphinDB依然放弃1个数量级以上的劣势,而且随着并发用户的减少,劣势更加显著。本测试仅限于工夫序列数据,论断不适用于更为通用的数据畛域。 2. 测试环境DolphinDB部署在5个ecs.r5.large节点上,每个节点根本配置如下: 操作系统:Ubuntu 16.04处理器:Intel Xeon Platinum 8163 (2 Cores)内存:16 GB硬盘:150 GB SSDHybridDB采纳2C SSD配置,领有4个计算节点,每个节点根本配置如下: 处理器:2 Cores内存:16 GB硬盘:160 GB SSDDolphinDB采纳1个主节点,4个计算节点,配置8个worker和2个local executor,每个计算节点限度应用12 GB内存。 HybridDB间接应用,不做任何进一步的配置,每个计算节点2个段数据库。通过测试开启Pivotal Query Optimizer时HybridDB体现更差,因而本报告中所有测试都默认只应用Legacy Query Optimizer。 压缩为gzip的CSV数据寄存在阿里云OSS服务器上。DolphinDB通过内网取得OSS上的数据后解压并加载,HybridDB间接通过oss协定定义内部表从内网传输、解压并加载OSS上的数据。 3. 数据咱们应用的数据是2007年8月的股票报价数据,大概有65.6亿条记录,每天的数据保留在一个CSV文件中。未压缩的CSV文件有273 GB,压缩为gzip的文件有23 GB。压缩后的数据被上传到阿里云OSS上。 4. 数据加载比照表4.1是DolphinDB和HybridDB加载CSV文件时各变量数据类型,分区计划如下 DolphinDB应用date和symbol进行组合分区。依据date产生了23个值分区,依据symbol产生了128个范畴分区。分区总数是23*128=2944个。每个分区写入两个正本。HybridDB依据symbol散列散布数据,依据date按日期范畴分区,在压缩的状况下对symbol施加sort key有不到10%的性能降落,在不压缩的状况下对symbol施加sort key有不到10%的性能回升,随后的测试中都没有应用sort key。两个平台的数据加载比照后果如表4.2所示,因为DolphinDB和HybridDB都从OSS上获取压缩数据,因而能够认为HybridDB的数据传输和解压工夫与DolphinDB基本一致,则HybridDB的数据载入工夫能够认为是90-9-12=69分钟。DolphinDB的数据载入速度约为HybridDB的3倍。 表4.1 数据类型对应关系 表4.2 数据处理并载入比照 DolphinDB采纳LZ4格局的压缩,HybridDB基于开源Greenplum,不反对QuickLZ格局,因而采纳了ZLIB的3级压缩。压缩后的磁盘空间(28G)占用少于DolphinDB(51G)。上表中DolphinDB的空间占用达到了102G是因为有两个正本。 5. 查问性能比照咱们在两个零碎中别离测试了8种查问。这些查问波及数据过滤、排序、分组和聚合,因为DolphinDB与HybridDB的语法有差别,具体查问语句见表5.1。 每条查问须要扫描不同范畴的数据,下述8条测试查问笼罩了部分扫描到全表扫描。遗憾的是在HybridDB中对第7条查问反对较差,在零碎压力大的状况下会呈现外部谬误(Unexpected Internal Error),因而在HybridDB的测试中将除去第7条查问。 单个简单查问的比照后果如表5.2所示,每条查问的测试间断进行2次,表中列出第1次的后果,DolphinDB比HybridDB快3~240倍,并且在缓存的反对下,第1至3条查问缓存后进行的第2次测试用时别离为26ms,16ms和16ms。 从后果中能够看出,第1、3和6条查问是DolphinDB显著当先的,这些查问在where分句中均指定了明确的symbol。回顾两个零碎的分区策略,因为HybridDB不反对字符串类型的范畴分区,因而波及到不同的symbol的查问就会因为分区不够灵便而导致局部节点理论扫描的数据远多于指标数据而性能劣化。 表5.1 具体执行的查问语句 表5.2 独自执行每个查问的用时比照 6. 并发性能比照6.1 多用户并发简略查问 在本节,咱们将进行多用户并发查问测试比照。结果表明,即便在多用户并发查问的状况下,DolphinDB依然比HybridDB更具劣势。 咱们首先进行简略的select查问并发测试。步骤如下: ...

January 13, 2021 · 1 min · jiezi

关于postgresql:使用PGSHOWPLANS监控PostgreSQL执行计划

作者:cybertec公司译者:类延良,任职于瀚高根底软件股份有限公司,PostgreSQL数据库技术爱好者,10g &11g OCM,OGG认证专家 监控PostgreQL执行打算pg_show_plans是一个收费的PostgreSQL工具,可让您实时监督执行打算。到目前为止,在SQL语句仍在运行时无奈监督查问打算。随着pg_show_plans的引入,这些限度被解除了。当初,您能够实时实时查看服务器上正在产生的所有。 次要特色: 实时查看执行打算反对各种输入格局(文本,JSON等)反对嵌套打算pg_show_plans可用于所有最新版本的PostgreSQL(> = 9.5)。 您的劣势: 在慢查问仍在运行时对其进行分析实时洞察易于应用100%为企业级筹备查看所有流动打算pg_show_plans是PostgreSQL的收费扩大,能够间接从咱们的GitHub(https://github.com/cybertec-p...。 它应用PostgreSQL外围性能来为您提供所有必要的洞察。数据以简略视图的模式显示,能够轻松获取。因而,能够将pg_show_plans附加到您抉择的任何监控软件中。咱们曾经在宽泛的监督解决方案PGWatch中胜利实现了pg_show_plans。 pg_show_plans:无效的存储外部执行信息无效地存储在共享内存中。这使得检索信息以及过滤这些打算变得容易和疾速。 运行pg_show_plans 业余的帮忙如果您有任何疑难或想亲自与咱们探讨任何细节,请随时与咱们分割!(https://www.cybertec-postgresql.com/en/contact/) 咱们提供及时的交付,业余的解决以及20年的PostgreSQL教训。 原文链接:https://www.cybertec-postgresql.com/en/products/pg-show-plans/ 更多精彩内容,请关注以下平台、网站: 中国PostgreSQL分会官网公众号(技术文章、技术流动):开源软件联盟PostgreSQL分会 中国PostgreSQL分会技术问答社区:www.pgfans.cn 中国PostgreSQL分会官方网站:www.postgresqlchina.com

January 7, 2021 · 1 min · jiezi

关于postgresql:为PostgreSQL的表自动添加分区

作者:乐途笔名:lottu个人简介:目前在一家游戏公司从事数据库架构设计和开发,曾主导公司去“O”的相干工作;集体博客:https://www.cnblogs.com/lottu PostgreSQL引进“分区”表个性,解放了之前采纳“表继承”+“触发器”来实现分区表的繁琐、低效。而增加分区,都是手动执行SQL。演示目标:利用python来为PostgreSQL的表主动增加分区。python版本:python3+pip3 install psycopg2 一、配置数据源database.ini 文件:记录数据库连贯参数 [adsas]host=192.168.1.201database=adsasuser=adsaspassword=adsas123port=5432[test]host=192.168.1.202database=adsasuser=adsaspassword=adsas123port=5432二、config脚本config.py文件:上面的config()函数读取database.ini文件并返回连贯参数。config()函数位于config.py文件中 #!/usr/bin/python3from configparser import ConfigParser def config(section ,filename='database.ini'):    # create a parser    parser = ConfigParser()    # read config file    parser.read(filename)     # get section, default to postgresql    db = {}    if parser.has_section(section):        params = parser.items(section)        for param in params:            db[param[0]] = param[1]    else:        raise Exception('Section {0} not found in the {1} file'.format(section, filename))     return db三、创立子表脚本pg_add_partition_table.py 文件:其中 create_table函数是创立子表SQL。其中参数 ...

January 6, 2021 · 3 min · jiezi

关于postgresql:四年三次获奖PostgreSQL再度荣获年度数据库桂冠

PostgreSQL是一种数据库管理系统,在过来的一年中,该数据库管理系统在DB-Engines排行榜中比其余360个受监视系统中的任何其余零碎更受欢迎。因而,咱们发表PostgreSQL为2020年度DBMS。 为了确定本年度的DBMS,咱们从2021年1月的最新得分中减去了2020年1月的风行得分。咱们应用这些数字的差值而不是百分比,因为这将有利于开始时风行度很小的零碎。后果是一个依照它们在2020年胜利地进步了本人的受欢迎水平的DBMS列表,或者换言之,有多少人开始用咱们办法中掂量的一种形式来交换,例如工作机会,业余简介条目和网络上援用。 年度DBMS:PostgreSQL PostgreSQL曾经在2017和2018年取得了年度DBMS奖,并且当初成为第一个三度取得此殊荣的数据库管理系统。 PostgreSQL以其稳定性和功能集而闻名和青睐。最近的版本次要集中在数据库引擎的改良上,以进步其性能和效率。对于DevOps而言,这些加强性能十分受欢迎,咱们的受欢迎水平得分表明了这一点:七年前PostgreSQL的受欢迎水平得分为167,而当初为552。与排名前三的零碎的差距逐年放大。 值得一提的是,PostgreSQL是咱们排名中各种数据库管理系统的根底技术。如果这些数据库管理系统在其根底之上提供了重要的DBMS性能,则将它们列为独自的条目。这些零碎包含Greenplum,EDB Postgres,TimescaleDB,Citus等。 亚军:Microsoft Azure SQL数据库Microsoft AzureSQL数据库是一个齐全托管的数据库即服务(database as aservice)。它基于Microsoft SQLServer产品的最新稳固版本构建,并针对可在云中运行的性能进行了优化(主动缩放,天文复制,主动调整等)。因而,不反对手动备份/还原、服务器配置参数治理之类的性能。 在2020年1月到2021年1月之间,Azure SQL数据库的受欢迎水平评分从28.2分进步到71.4分(令人印象粗浅253%),并且在DB-Engines排名中的整体排名从25进步到15。 在DB-Engines的9年中,这是云数据库服务首次进入“年度最佳数据库”奖的前三名。 第三名:MongoDBMongo在2013年和2014年曾两次取得DBMS的年度冠军,自那时以来,其受欢迎水平始终没有进行。它是最风行的NoSQL零碎,最驰名的是Document Store。一个鲜为人知的事实是,当咱们蕴含辅助数据库模型时,MongoDB也是最受欢迎的搜索引擎。这很好地阐明了MongoDB自11年前公布以来的范畴不断扩大。同样重要的是,毫无疑问,MongoDB是当今曾经成熟的,可用于生产的零碎,而且十年前的网络级笑话还没有特地成熟,只管过后它们可能很乏味。咱们恭喜PostgreSQL,Microsoft和MongoDB在2020年获得的胜利。 以前的DB-Engines年度DBMS奖获得者: 数据库年度PostgreSQL2020年MySQL2019年PostgreSQL2018年PostgreSQL2017年Microsoft SQL2016年Oracle2015年Mongo DB2014年Mongo DB2013年反馈对于后果的选定陈说:PostgreSQL外围团队成员Jonathan Katz:“ PostgreSQL的胜利归功于寰球合作的开源开发人员社区,他们正在解决数据管理的古代挑战。咱们感激DB-Engines对PostgreSQL的继续认可,并且咱们将持续加强咱们的开发人员敌对型开源数据库系统,该零碎以其可靠性和健壮性着称。” MongoDB首席营销官Rishi Dave:“MongoDB迎来了丰登的一年。咱们在开发人员中的受欢迎水平持续增长,这一事实证明了咱们的社区服务器已下载了1.3亿次-仅往年就下载了5500万,这比咱们在公司成立的最后十年中下载的次数还多,咱们的寰球云数据库MongoDB Atlas当初就占了咱们支出的近50%,并且随着Multi-Multi版本的公布,它成为第一个使应用程序可能在多个云提供商之间同时运行的多星散群。将DB-Engine的这种额定认可增加到咱们的成就列表中,真是令人兴奋。” 原文链接:https://db-engines.com/en/blog_post/85 更多精彩内容,请关注以下平台、网站: 中国PostgreSQL分会官网公众号(技术文章、技术流动):开源软件联盟PostgreSQL分会 中国PostgreSQL分会技术问答社区:www.pgfans.cn 中国PostgreSQL分会官方网站:www.postgresqlchina.com

January 5, 2021 · 1 min · jiezi

关于postgresql:重磅中国PostgreSQL分会与腾讯云战略合作协议签订

12月24日,在腾讯云数据库2020年度盛典中,中国开源软件推动联盟PostgreSQL分会(以下简称中国PostgreSQL分会)与腾讯云计算(北京)有限责任公司(以下简称腾讯云)正式签订策略单干协定,单方将在联结认证、数据库高端人才培养、国产化人才生态体系建设、国内技术交换、中国PG开发者社区、PG和云计算生态建设等方面发展全面单干、深度共建。 中右:中国PostgreSQL分会秘书长、CCF数据库专委会委员白国华;中左:腾讯云数据库副总经理王义成 中国PostgreSQL分会是在工信部中国电子信息产业倒退研究院领导下,依靠中国开源软件推动联盟,致力于增强中国对开源技术的建设和利用,促成PostgreSQL产学研用和生态倒退。 PostgreSQL凭借其敌对的开源协定和弱小的性能个性,越来越受到国内外数据库厂商和终端用户的欢送。TDSQL(PostgreSQL版,原TBase)是由腾讯数据平台团队自主研发的企业级分布式HTAP数据库,并于去年11月正式开源,可完满实用于领有海量数据、高并发、高HTAP,以及分布式事务能力的利用场景。截止目前,TDSQL(PostgreSQL版,原TBase)在GitHub上的Star数已超过800个,Fork数近200。 此次中国PostgreSQL分会与腾讯云数据库的单干,将施展中国PostgreSQL分会在从业者社区和PostgreSQL生态建设的劣势和教训与腾讯云在数据库畛域十余年的业余积攒,实现强强联合,进一步促成单方优势互补和业务倒退。 在本次签约典礼上,还公布了PostgreSQL中国培训认证与腾讯云数据库的联结认证,单方将在PGCM(高级)定制化设置TDSQL(PostgreSQL版,原TBase)模块联结认证,为宽广数据库从业者带来更多优良的课程资源和待业通道。 中国PostgreSQL培训认证总监魏波与腾讯云数据库腾讯云数据库培训认证负责人陈昊签订PostgreSQL培训认证单干协定 中国PostgreSQL培训认证由中国PostgreSQL分会教育与培训委员会推动,联结工信部中国电子工业标准化技术协会、专业培训机构和数据库生态企业独特建设,旨在造就更多高水平PostgreSQL技术人才,是国内惟一的体系化、规范化的PostgreSQL教育、培训与认证体系,列入“中国电子信息行业业余人才培养工程”之中。 PGCM(高级)TDSQL方向联结认证体系的培训认证纲要、培训渠道、待业渠道、报名形式等更多细则将陆续出台。 腾讯云数据库在开源畛域的投入一直加大,深度拥抱并推动寰球开源生态的倒退,通过一直的翻新步调,继续推动国产化人才的造就体系,不遗余力地积极参与和回馈开源,不仅是对开源精力的一种传承,表白了对于开源技术将来走向的坚定信念。中国PostgreSQL分会愿同腾讯云数据库一道,以PostgreSQL为切入点,独特推动中国数据库生态建设和倒退! 更多精彩内容,请关注以下平台、网站: 中国PostgreSQL分会官网公众号(技术文章、技术流动):开源软件联盟PostgreSQL分会 中国PostgreSQL分会技术问答社区:www.pgfans.cn 中国PostgreSQL分会官方网站:www.postgresqlchina.com

December 29, 2020 · 1 min · jiezi

关于postgresql:模糊匹配相似度查询怎么破看PG亿级检索毫秒响应

浏览使人空虚,探讨使人麻利,写作使人准确。 需要场景假如Aken某天在咖啡店听到一首歌,感觉很好听,但不晓得具体的歌名,只晓得歌曲是“民谣”,歌词蕴含“一把破吉他”、“旅人”,而后是男歌手。 如果我想收藏该歌曲,请问小编如何为我找到指标歌曲、对应的歌手、专辑? 为什么要探讨这个问题首先,搜寻需要的理论场景切实太多了,能够说处处可见,比方: 百度、Google输出关键字搜寻信息;泛娱乐行业搜寻对应的指标音视频文件;人脸识别、指纹验证、特定动作捕获认证等。其次,物联网时代网络产生的数据信息浩如烟海,须要高效的搜索引擎技术帮忙咱们疾速捕捉到相关度极高的匹配信息。 所以,如果咱们不做和业务利用场景心心相印的技术钻研,那么咱们无妨就多看看和业务比拟符合的技术。 而后这里探讨的技术问题与当今、将来的业务场景的分割都十分亲密,相干技术问题的解决,也肯定能够很好的推动利用的落地。 基于DB的传统解决方案如果咱们是一个应用过关系型数据库的同学,咱们很容易就想到SQL含糊搜寻。如: 通过Btree实现的后含糊搜寻select * from tab_aken where col like 'aken%'; 或者Btree反向索引实现的前含糊搜寻select * from tab_aken where col like '%aken'; 然而,很多时候用户并不知道须要的前缀或后缀是什么,通常只记得其中的某些关键字或完好的信息,而后查找最类似的指标。 比方目击者只记得罪犯有局部特色:胡子、脸上刀疤、黑夹克、猥琐·········,而后依据关键字含糊查问锁定肯定范畴的嫌疑犯。 于是,事实中更多的查问需要可能是上面这样的: 前后含糊select * from tab_aken where col like '%aken%'; 多字段组合select * from tab_aken where a=? and b=? or c=? and d=? or e between ? and ? and f in (?); 类似查问、向量间隔select * from tab_aken order by similarity(col, 'aken') desc limit 100; 此处省略N种查问场景·················· 那么问题来了,数据库通常并不具备上述前后含糊查问及其后的更多场景的高效检索能力。 上面以MySQL为例,看一个背面案例。 在32C-64G-SSD高端存储的设施上,这里运行了一个mysql-5.7.27,实例中有一个800w左右数据量的表: mysql> select count(*) from test.tab_test_txt;+----------+| count(*) |+----------+|  8814848 |+----------+1 row in set (3.46 sec)mysql>mysql>select table_name,sum(truncate((data_length+index_length)/1024/1024/1024, 2)) data_GB,sum(truncate((data_length)/1024/1024/1024, 2)) tabsize_gb,sum(truncate((index_length)/1024/1024/1024, 2)) idxsize_gb from information_schema.tables where table_name+--------------+---------+------------+------------+| table_name   | data_GB | tabsize_gb | idxsize_gb |+--------------+---------+------------+------------+| tab_test_txt |    5.59 |       4.12 |       1.47 |+--------------+---------+------------+------------+1 row in set (0.00 sec)mysql>而后应用字段name做含糊查问,命中600w多数据,性能十分查,耗时11.14秒。 ...

December 23, 2020 · 4 min · jiezi

关于postgresql:PostgreSQL您可能需要增加MAXLOCKSPERTRANSACTION

作者:汉斯·尤尔根·舍尔希(Hans-JürgenSchönig),从上世纪90年代就有应用PostgreSQL的教训,他是CYBERTEC公司的CEO与技术带头人,CYBERTEC是该畛域的市场领导者之一,自2000年以来已为寰球有数客户提供服务。他著有图书《Mastering PostgreSQL 9.6: A comprehensive guide for PostgreSQL 9.6 developers and administrators》和《Mastering PostgreSQL 11,Second Edition》,这两本英文图书均曾经由武汉大学彭煜玮老师翻译实现并均已出版,中文书名别离为《由浅入深PostgreSQL》、《精通PostgreSQL 11第二版》。 译者:类延良,任职于瀚高根底软件股份有限公司,PostgreSQL数据库技术爱好者,10g &11g OCM,OGG认证专家。 “out of shared memory”:你们中的有些人可能曾经在PostgreSQL中看到了该谬误音讯。然而它的真正含意是什么,如何预防呢?实际上,问题并不像乍看起来那样艰涩难懂。max_locks_per_transaction是您须要用来防止麻烦的要害配置参数。out of shared memory:何时产生PostgreSQL应用的大多数共享内存都是固定大小的。对于I/O缓存(shared buffers)以及许多其余组件来说,这都是正确的。这些组件之一与锁定无关。如果您在事务中创立一个表,PostgreSQL必须跟踪您的流动以确保并发事务不能删除您创立的表。跟踪流动很重要,因为您要确保DROP TABLE(或某些其余DDL)必须期待所有读取事务曾经终止。问题是,您必须将无关跟踪流动的信息存储在某个地位,而这正是您必须理解的内容。 让咱们运行一个简略的脚本: BEGIN; SELECT 'CREATE TABLE a' || id || ' (id int);'FROM generate_series(1, 20000) AS id;gexec该脚本的作用是启动一个事务并生成20000个 CREATE TABLE语句。它只是生成SQL,而后主动执行该SQL(gexec将前一条SQL语句的后果视为输出)。 让咱们看看SELECT语句产生了什么…… BEGIN ?column? ---------------------------- CREATE TABLE a1 (id int); CREATE TABLE a2 (id int); CREATE TABLE a3 (id int); CREATE TABLE a4 (id int); CREATE TABLE a5 (id int);...当初让咱们看看PosgreSQL做了什么: ...

December 22, 2020 · 2 min · jiezi

关于postgresql:优化PostgreSQL-Autovacuum

作者:Laurenz Albe是CYBERTEC的高级顾问和反对工程师。自2006年以来,他始终在PostgreSQL上工作并为PostgreSQL做奉献。 译者:类延良,任职于瀚高根底软件股份有限公司,PostgreSQL数据库技术爱好者,10g &11g OCM,OGG认证专家。 在许多PostgreSQL数据库中,您无需思考或放心调整autovacuum。它会在后盾主动运行,并在不障碍您的状况下进行清理。 然而有时默认配置还不够好,您必须调整autovacuum以使其失常工作。本文介绍了一些典型的问题计划,并介绍了在这些状况下的解决办法。 autovacuum的工作有许多autovacuum的配置参数,这会使调整变得复杂。次要起因是autovacuum具备许多不同的工作。从某种意义上说,autovacuum必须解决由PostgreSQL的多版本并发管制(MVCC)实现引起的所有问题: 清理UPDATE或DELETE操作后留下的“死元组”更新可用空间映射(free space map),以跟踪表块中的可用空间更新仅索引扫描所需的可见性图(visibility map)“解冻”(freeze)表行,以便事务ID计数器能够平安地盘绕依据这些性能中的哪个会导致问题,您须要不同的办法来调整autovacuum。 调整autovacuum以革除死元组最有名的autovacuum工作是清理UPDATE或DELETE操作中的死元组。如果autovacuum不能跟上清理死元组的速度,则应遵循以下三个调整步骤: 确保没有任何货色能够阻止autovacuum回收死元组查看避免vacuum革除死元组的已知起因https://www.cybertec-postgresql.com/en/reasons-why-vacuum-wont-remove-dead-rows/罪魁祸首通常是长期事务。除非您能够打消这些阻碍,否则调整autovacuum将无用。 如果您不能从根本上解决问题,则能够应用配置参数idle_in_transaction_session_timeout使PostgreSQL终止会话,这些会话在事务中处于“idle in transaction”的工夫过长。这会在客户端导致谬误,然而如果您没有其余办法能够放弃数据库失常运行,这可能是有情理的。同样,要解决长期运行的query,能够应用statement_timeout配置参数。 调整autovacuum以使其运行更快如果autovacuum无奈跟上清理死元组的速度,那么解决方案就是使其工作更快。这看起来仿佛很显著,然而许多人陷入了使autovacuum更早开始或更频繁运行将解决问题的陷阱。 VACUUM是一项消耗资源的操作,因而默认状况下,autovacuum操作的速度成心升高。目标是使其在后盾运行而不障碍失常的数据库操作。然而,如果您的工作负载创立了很多死元组,那么您将不得不使其更具侵略性: 从autovacuum_vacuum_cost_limit默认值200开始减少(这是一种柔和的办法)从autovacuum_vacuum_cost_delay从默认值2开始缩小(在旧版本:20)毫秒(这是无效的办法)设置autovacuum_vacuum_cost_delay为零将使autovacuum与手动VACUUM速度一样快,即尽可能快。 因为并非所有表都以雷同的速度增长死元组,因而通常最好不要更改中的全局设置postgresql.conf,而要独自更改忙碌表的设置:ALTER TABLE busy_table SET (autovacuum_vacuum_cost_delay = 1); 对表进行分区还能够帮忙更快地实现工作。请参阅本文partition局部理解更多信息。 更改工作负载,以便生成更少的死元组如果没有其余成果,则必须看到生成的死元组更少。兴许将几个UPDATE合并为一行UPDATE通常,您能够应用“ HOT更新”来显着缩小死元组的数量: 将表的fillfactor参数设置为小于100的值,以使INSERTs在每个块中保留一些可用空间确保你在update语句中批改的列不是索引列而后,任何SELECT或DML语句都能够革除死元组,而对VACUUM的需要则更少。 调整仅索引扫描的autovacuum索引扫描的低廉局部是查找理论的表行。如果您想要的所有列都在索引中,则齐全不须要拜访该表。然而在PostgreSQL中,您还必须查看一个元组是否可见,并且该信息仅存储在表中。 为了解决这个问题,PostgreSQL对每个表都有一个“可见性图”(visibility map)。如果一个表块在可见性图(visibility map)中被标记为“所有可见”,则不用拜访该表以获取可见性信息。 因而,要取得真正的仅索引扫描,autovacuum必须处理表并常常更新可见性图(visibility map)。为此,如何配置autovacuum取决于查问收到的数据批改类型: 为接管UPDATEs或DELETEs的表的仅索引扫描调整autovacuum为此,您能够缩小表的存储参数autovacuum_vacuum_scale_factor,例如ALTER TABLE mytable SET (autovacuum_vacuum_scale_factor = 0.01); 依照如上所述放慢autovacuum是一个好主见。 调整仅接管INSERTs的表的仅索引扫描的autovacuum从v13开始,这很简略:对配置参数autovacuum_vacuum_insert_scale_factor进行调整,调整办法是如上所示对autovacuum_vacuum_scale_factor的调整。 对于较旧的PostgreSQL版本,您能够做的最好办法就是升高autovacuum_freeze_max_age,最佳值取决于您应用事务id的速率,如果您每天耗费100000个事务id,并且心愿每天主动清理table,则能够进行如下设置: ALTER TABLE insert_only SET (autovacuum_freeze_max_age = 100000); 要测量事务ID耗费的速率,请在一个长的工夫距离内应用两次txid_current()函数(或者从V13开始的pg_current_xact_id()函数),而后取其差值。 调整autovacuum以防止事务回绕问题失常时,autovacuum关怀并启动一个非凡的“anti-warparound” autovacuum worker,不管一个表中最老的transaction id比autovacuum_freeze_max_age参数值更老或者一个表中的最老的multiact比autovacuum_multixact_freeze_max_age 参数值更老 确保anti-wraparound vacuum能够freeze掉所有表中的行再次强调,你不得不确保:没有阻塞autovacuum进行freeze老元组和改良pg_database.datfrozenxid 以及pg_database.datminmxid。这些阻塞者包含: 运行工夫很长的session,这些session放弃一个事务处于open状态或者有长期表(autovacuum不能解决长期表)数据损坏,这会导致所有的autovacuum worker运行失败。为了避免数据损坏,请应用更好的硬件,并总是运行最新的PostgrSQL的主要版本。 为接管updates或者Deletes的tables调优anti-wraparound vacuum在接管updates或者deletes的table上,你不得不做的所有是看autovacuum正在运行,并且足够快以便及时实现(参见上文) ...

December 21, 2020 · 1 min · jiezi

关于postgresql:PostgreSQL高可用多主复制解决方案

作者:伊布拉尔·艾哈迈德(Ibrar Ahmed)在2018年7月退出Percona。在退出Percona之前,Ibrar曾在EnterpriseDB负责高级数据库架构师10年。Ibrar领有18年的软件开发教训。Ibrar在PostgreSQL上写了多本书。 译者:魏波,中国PG分会培训认证执行总监、资深数据库工程师,十多年的数据库运维治理及培训教训,把握PostgreSQL架构部署、性能优化等,致力于推动PostgreSQL在中国的倒退。 因为数据量微小,因而可伸缩性已成为数据库畛域中最热门的主题之一。可伸缩性能够程度或垂直实现。垂直可伸缩性意味着向现有节点增加更多资源/硬件,以加强数据库存储和解决更多数据的能力,例如,向现有节点增加CPU,内存或磁盘。每个DBMS引擎都通过改良锁定/互斥机制和并发性,从而能够更无效地应用新增加的资源,从而进步了垂直可伸缩性的能力。数据库引擎提供配置参数,这有助于更无效地利用可用的硬件资源。 因为硬件老本以及在现有节点中增加新硬件的限度,因而并非总是能够增加新硬件。因而,须要程度可伸缩性,这意味着向现有网络节点增加更多节点而不是加强现有节点的性能。与垂直可伸缩性相同,程度可伸缩性难以施行。这须要更多的开发工作。 PostgreSQL为垂直可伸缩性和程度可伸缩性提供了相当丰盛的功能集。它反对具备多个处理器和大量内存的计算机,并提供配置参数来治理这些资源的应用。PostgreSQL中并行性的新性能使垂直可伸缩性更加突出,但也不不足程度可伸缩性。复制是程度可伸缩性的要害支柱,PostgreSQL反对单向主从复制,这足以满足许多用例。 要害概念数据库复制数据库复制将数据复制到其余服务器上,并将其存储在多个节点上。在此过程中,数据库实例从一个节点转移到另一节点,并进行了准确的复制。数据复制用于进步数据可用性,这是HA的一项要害性能。通常有一个残缺的数据库实例,或者一些常常应用或所需的对象被复制到另一台服务器。复制提供了数据库的多个统一正本,它不仅提供了高可用性,而且还进步了查问性能。 同步复制将数据写入磁盘时,有两种策略:“同步”和“异步”。同步复制意味着同时将数据写入主服务器和从服务器,换句话说,“同步复制”意味着提交期待近程端的写入/刷新。同步复制用于具备即时故障转移要求的高端事务环境中。 异步复制异步意味着首先将数据写入主机,而后再复制到从机。在解体的状况下,可能会产生数据失落,然而异步复制提供的开销很小,因而在大多数状况下是能够承受的。它不会使主机负担过重。与同步复制相比,从主数据库到从数据库的故障转移须要更长的工夫。 简而言之,同步和异步之间的次要区别在于何时将数据写入主服务器和从服务器。 单主复制繁多主复制意味着仅容许在单个节点上批改数据,并将这些批改复制到一个或多个节点。只能在主节点上进行数据更新和插入。在这种状况下,应用程序须要将流量路由到主服务器,这会减少应用程序的复杂性。因为只有一个主节点负责写入数据,所以没有抵触的机会。在大多数状况下,单主复制对于应用程序来说就足够了,因为配置和治理起来并不那么简单。但在某些状况下,单主复制是不够的,您须要多主复制。 多主复制 多主复制意味着有多个节点充当主节点。数据在节点之间复制,并且能够在一组主节点上进行更新和插入。在这种状况下,数据有多个正本。该零碎还负责解决并发更改之间产生的任何抵触。有多个主复制有两个次要起因。一个是高可用性,第二个是性能。在大多数状况下,某些节点专用于密集写入操作,而某些节点专用于某些节点或用于故障转移。 多主复制的优缺点 长处: 万一一个主机产生故障,另一个主机依然能提供更新和插入服务。主节点位于几个不同的地位,因而所有主节点产生故障的机会十分小。能够在多台服务器上进行数据更新。应用程序不须要将流量仅路由到单个主机。毛病: 多主复制的次要毛病是它的复杂性。解决抵触十分艰难,因为能够同时在多个节点上进行写操作。有时在发生冲突的状况下须要人工干预。数据不统一的可能性。正如咱们曾经探讨的那样,在大多数状况下,单主复制就足够了,强烈建议这样做,然而在某些状况下,依然须要多主复制。PostgreSQL具备内置的单主复制,但可怜的是,PostgreSQL主版本中没有多主复制。有一些可用的多主复制解决方案,其中一些以应用程序的模式呈现,而有些则是PostgreSQL分支。这些派生有其本人的小型社区,并且大多由单个公司治理,而不禁PostgreSQL国内社区治理。 这些解决方案有多种类别,包含凋谢源/关闭源,优先级,收费和付费。 BDR(双向复制)xDBPostgreSQL-XLPostgreSQL-XC/PostgreSQL-XC2RubyrepBucardo这是所有复制解决方案的一些要害性能 1.BDR(双向复制)BDR是多主复制解决方案,并且具备不同的版本。BDR的晚期版本是凋谢源代码,但其最新版本是关闭源代码。这个解决方案是由2ndQuadrant开发的,也是迄今为止最优雅的多主解决方案之一。BDR提供异步多主逻辑复制。这基于PostgreSQL逻辑解码性能。  因为BDR利用本质上是在其余节点上重播事务,因而如果正在利用的事务与在接管节点上提交的事务之间存在抵触,则重播操作可能会失败。 2.xDBEnterpriseDB用Java开发了本人的双向复制解决方案,称为xDB。它基于本人的协定。因为它是一个关闭源代码的解决方案,所以没有设计信息为外界所知。 由EnterpriseDB开发和保护。用Java开发。源代码是关闭源代码。xDB Replication Server蕴含多个可执行程序。这是一个齐全关闭源代码的专有软件。用Java开发,大家会埋怨它的性能。故障转移工夫是不可承受的。用户界面可用于配置和保护复制零碎。 3.PostgreSQL XC/XC2PostgreSQL-XC由EnterpriseDB和NTT开发。它是一个同步复制解决方案。Postgres-XC是一个开源我的项目,旨在提供可写扩大、同步、对称和通明的PostgreSQL集群解决方案。多年来,我从未在EnterpriseDB和NTT上看到PostgreSQL-XC的大量开发。目前,华为正在为此致力。对于OLAP,曾经报告了一些性能晋升,但不适用于TPS。 4.PostgreSQL XL它是PostgreSQL-XC的一个分支,目前受2ndQuadrant反对。它会落后于社区PostgreSQL的版本迭代。据理解,它基于PostgreSQL 10.6,它与PostgreSQL最新版本PostgreSQL-12不兼容。咱们晓得它是基于PostgreSQL-XC的,当咱们议论OLAP时,它十分好,但不太适宜高TPS。留神:所有PostgreSQL XC/XC2/XL都被认为是“ PostgreSQL衍生软件”,与PostgreSQL的以后开发没有同步。 5.Rubyrep它是阿恩.特莱曼(Arndt Lehmann)开发的异步主/主复制。它宣称具备最简略的配置特色,并且能够跨平台(包含Windows)运行。它始终在两台服务器上运行,在Rubyrep术语中别离称为“左”和“右”。因而,将其称为“2-master”设置而不是“ multi-master”会更合乎其特点。 rubyrep能够在左右数据库之间间断复制更改。主动设置必要的触发器,日志表等主动发现新增加的表并同步表内容主动重新配置序列,以防止反复的键抵触跟踪对主键列的更改能够同时实现主从复制提供事后建设的抵触解决办法:左/右获胜;早/晚更改胜出可通过ruby代码段指定自定义抵触解决方案复制决定能够有选择地记录在rubyrep事件日志表中留神:–就开发而言,该我的项目在过来三年中始终没有发展。 6.BucardoBucardo是End Point公司的Jon Jensen和Greg Sabino Mullane开发的基于触发器的复制解决方案。Bucardo的解决方案曾经存在了将近20年,最后设计为“惰性”异步解决方案,最终能够复制所有更改。有一个Perl守护程序,它监听NOTIFY申请并对其执行操作。表上产生的更改记录在表(bucardo_delta)中,并告诉守护程序。守护程序告诉控制器,该控制器启动一个子过程以同步表更改。如果存在抵触,则应用规范或自定义抵触处理程序进行解决。 基于触发器的复制有解决抵触策略对Perl 5,DBI,DBD :: Pg,DBIx :: Safe的依赖。装置和配置很简单。复制常常中断并且呈现谬误。论断单主机复制的大多数状况就足够了,并且曾经察看到人们正在配置多主机复制并使他们的设计过于简单。强烈建议设计零碎,并尝试防止多主复制,而仅在没有其余办法的状况下应用它。起因有两个:第一,它使零碎过于简单且难以调试;第二,因为没有可用的社区保护的多主复制,因而您将无奈从PostgreSQL社区取得反对。 原文链接:https://www.percona.com/blog/2020/06/09/multi-master-replication-solutions-for-postgresql/ 更多精彩内容,请关注以下平台、网站: 中国Postgre SQL分会官网公众号(技术文章、技术流动):开源软件联盟PostgreSQL分会 中国Postgre SQL分会技术问答社区:www.pgfans.cn 中国Postgre SQL分会官方网站:www.postgresqlchina.com

December 18, 2020 · 1 min · jiezi

关于postgresql:VACUUM无法从表中删除死元组的三个原因

作者:Laurenz Albe是CYBERTEC的高级顾问和反对工程师。自2006年以来,他始终在PostgreSQL上工作并为PostgreSQL做奉献。 译者:类延良,任职于瀚高根底软件股份有限公司,PostgreSQL数据库技术爱好者,10g &11g OCM,OGG认证专家 每当更新或删除PostgreSQL表中的行时,就会留下死行。VACUUM解决这些死行,以便能够重复使用空间。如果不对表进行vacuum,它将变得收缩,这节约了磁盘空间并减慢了程序表扫描的速度(在较小extents上是索引扫描)。 VACUUM还负责freeze表中的行,免得在事务ID计数器回绕时避免出现问题,但这是另一回事。 通常,您不用关怀所有这些,因为PostgreSQL内置的autovacuum守护程序能够为您实现这些工作。 问题如果您的表变得收缩,首先查看的是autovacuum是否已对其进行解决: SELECT schemaname, relname, n_live_tup, n_dead_tup, last_autovacuumFROM pg_stat_all_tablesORDER BY n_dead_tup / (n_live_tup * current_setting('autovacuum_vacuum_scale_factor')::float8 + current_setting('autovacuum_vacuum_threshold')::float8) DESCLIMIT 10;如果您收缩的表未在此处显示,n_dead_tup为零且last_autovacuum为NULL,则可能是statistics collector存在问题。 如果收缩的表位于上述查问后果的顶部,但last_autovacuum为NULL,则可能须要将autovacuum配置为更具侵略性,这样这些收缩的表就能够失去解决。 然而有时后果看起来像这样: schemaname |    relname   | n_live_tup | n_dead_tup |   last_autovacuum------------+--------------+------------+------------+----------------- laurenz    | vacme |      50000 |      50000 | 2018-02-22 13:20:16 pg_catalog | pg_attribute |         42 |        165 | pg_catalog | pg_amop      |        871 |        162 | pg_catalog | pg_class     |          9 |         31 | pg_catalog | pg_type      |         17 |         27 | pg_catalog | pg_index     |          5 |         15 | pg_catalog | pg_depend    |       9162 |        471 | pg_catalog | pg_trigger   |          0 |         12 | pg_catalog | pg_proc      |        183 |         16 | pg_catalog | pg_shdepend  |          7 |          6 |(10 rows)这里显示:autovacuum最近在运行,然而它没有开释死的元组! ...

December 16, 2020 · 2 min · jiezi

关于postgresql:PG导入数据-duplicate-key-value-violates-unique-constraint解决

PG的staging环境导入测试数据,呈现 duplicate key value violates unique constraint 表: userextrainfo 最大id SELECT max(id) from userextrainfo;1300下一个自增id SELECT nextval('userextrainfo_id_seq');须要从新reset下自增id select setval('userextrainfo_id_seq',1301);

December 16, 2020 · 1 min · jiezi

关于postgresql:开源软件联盟PostgreSQL分会投稿指南

投稿要求1.稿件内容:与PostgreSQL数据库/开源软件严密相干的新闻舆论、热点资讯、技术文章、软文等文章。要求稿件论点中立,阐述详实,可能对读者粘性进步有踊跃作用。文章体裁不限,字数不限。 2.投稿格局:文字投稿倡议采纳word格局。视频投稿倡议采纳MP4格局,分辨率:1080X1920 注意事项:来稿请注明作者署名(实在姓名、笔名)、详情地址、邮编、联系电话、E-mail地址等,以便分割。其次,作者可提供作者简介,以便宣传推广。最初,咱们保留对稿件的增删权。 投稿形式请应用电子邮件形式投递稿件。编译的稿件,请注明出处并附带原文。请按稿件内容投递到相干编辑信箱(sunxiangbin@postgresqlchina.com),或:partner@postgresqlchina.com稿件著作权1.投稿人保障向我方所投之稿件,尚未在任何媒体上发表。2.投稿人向我方所投之作品不得同时向第三方投送,即不容许一稿多投。3.投稿人委托我方申明,未经我方容许,任何网站、媒体、组织不得转载、摘编其作品。 稿费结算1.原创稿件的稿酬规范为30—100元人民币/千字,翻译稿件的稿酬规范为20—50元人民币/千字。特稿特酬,优稿优酬 2.咱们采纳线上汇款的形式领取稿费,请在稿件中注明实在姓名(或者笔名),邮箱地址,微信账号/支付宝账号,出稿胜利咱们将会有工作人员与你取得联系。汇款形式:微信/支付宝,汇款一经胜利咱们将为你发送邮件。 3.如果你心愿通过银行卡结算,请在稿件中注明实在姓名,银行卡品种,卡号,开户银行的残缺名称(例如:XX银行XX分行XX支行,或信用卡核心、办事处、营业部、分理处....)咱们将通过齐鲁银行汇款。 4.稿费隔月结算。(仅对按要求及时提供的信息者) 5.稿件采纳后发现一稿多投的,稿费不予领取。

December 7, 2020 · 1 min · jiezi

关于postgresql:新闻Babelfish使PostgreSQL直接兼容SQL-Server应用程序

Babelfish for PostgreSQL是一个Apache-2.0开源我的项目,该我的项目向PostgreSQL增加了与Microsoft SQL Server兼容的端点,以使PostgreSQL数据库可能了解SQL Server wire protocol和罕用的SQL Server命令。应用Babelfish,最后为SQL Server构建的应用程序能够间接与PostgreSQL一起应用,简直不须要更改代码,也无需更改数据库驱动程序。PostgreSQL的Babelfish将于2021年在Github上可用。 基本原理Babelfish for PostgreSQL向PostgreSQL增加了一个端点,它能够了解SQL Server连贯协定表格数据流(TDS)和SQL Server罕用的T-SQL编程语言结构。对T-SQL的反对包含SQL方言、游标、目录视图、数据类型、触发器、存储过程和函数等元素。 次要劣势 更快的迁徙:从SQL Server到PostgreSQL的残缺迁徙速度更快,在更改利用程序代码方面节俭了数月甚至数年的工作;自在翻新:通过与现有T-SQL代码并排运行PostgreSQL代码来构建新性能;100%开源:应用许可的Apache 2.0许可证。帮助并领导Babelfish的倒退方向,以满足您的利用需要。Q&A1.谁为PostgreSQL开发了Babelfish?PostgreSQL的Babelfish我的项目由Amazon Web Services创立,后者构建了 Amazon Aurora 和 Amazon RDS之类的服务 2.您为什么为PostgreSQL开发Babelfish?咱们为PostgreSQL构建了Babelfish,以便更轻松地将应用程序从SQL Server迁徙到PostgreSQL。明天,有很多办法能够将数据和数据库架构从SQL Server迁徙到PostgreSQL。然而,一旦实现了初始数据库迁徙,就须要手动从新编写利用程序代码,敞开数据库驱动程序并验证应用程序行为有没有扭转。后果,因为解放开发人员的机会成本以及在对利用程序代码进行大量更改时存在引入谬误的危险,组织难以启动这类迁徙我的项目。 3.PostgreSQL的Babelfish何时可在GitHub上应用?PostgreSQL的Babelfish将于2021年在Github上可用。 4.谁能够为Babelfish for PostgreSQL做出奉献?任何人!咱们将使所有组织的开发人员,SQL Server专家和PostgreSQL专家都能轻松地帮忙领导Babelfish for PostgreSQL的倒退方向。咱们打算提供示例和培训,以帮忙那些对开源我的项目不相熟的人疾速入门。 5.Babelfish for PostgreSQL如何取得许可?咱们将依据许可的Apache-2.0许可证公布PostgreSQL的Babelfish,使您能够依据本人抉择的条款自在应用,复制和散发更改。 6.Babelfish for PostgreSQL用什么编程语言编写?Babelfish用C编写,这与用于开发PostgreSQL的编程语言雷同。Babelfish的某些局部是应用PL/pgSQL中的过程语言开发的。许多测试用例是用PL/pgSQL和T-SQL编写的。 7.我该如何奉献?您能够通过增加或扩大Babelfish性能,提交性能申请,解决文档以及奉献测试用例来做出奉献。 学到更多 开源博客发表Babelfish for PostgreSQL开源我的项目,能够浏览更多无关PostgreSQL的Babelfish的信息,理解我的项目的指标以及如何退出,奉献和合作。 在这里浏览 https://aws.amazon.com/cn/blogs/opensource/want-more-postgresql-you-just-might-like-babelfish/ 更多精彩内容,请关注以下平台、网站: 中国Postgre SQL分会官网公众号(技术文章、技术流动):开源软件联盟PostgreSQL分会 中国Postgre SQL分会技术问答社区:www.pgfans.cn 中国Postgre SQL分会官方网站:www.postgresqlchina.com

December 4, 2020 · 1 min · jiezi

关于postgresql:Postgre数据库优化

一、查看服务器配置1、查看CPU个数cat /proc/cpuinfo |grep "physical id" |sort |uniq |wc -l2、查看单个CPU的物理核数cat /proc/cpuinfo |grep "cpu cores" |uniq3、查看逻辑线程数cat /proc/cpuinfo |grep "processor" |wc -l4、查看内存大小free5、查看存储大小df -Th 当然,数据库优化不须要思考存储或者硬盘的大小。我的服务器配置如下:内存:512G连贯存储cpu:2cpu 24外围 48线程 二、配置postgresql.conf参数名称默认值优化值参数阐明listen_addresseslocalhost*容许所有ip连贯max_connections100200容许的最大连接数superuser_reserved_connections313保留给postgres用户的连贯,实用于切换到postgres用户后开启多个连贯的状况shared_buffers24MB128GB决定有多少内存能够被PostgreSQL用于缓存数据(举荐内存的1/4,不超过内存的1/2)huge_pagestrytry应用大页,倡议shared_buffers超过32GB时开启work_mem1MB8MB外部排序和一些简单的查问都在这个buffer中实现,不过要适可而止,每个连贯都要用这么大的effective_cache_size4GB256GB优化器假如一个查问能够用的最大内存,和shared_buffers无关(举荐内存的1/2),设置稍大,优化器更偏向应用索引扫描而不是程序扫描maintenance_work_mem64MB2GB这里定义的内存只是被VACUUM等消耗资源较多的命令调用时应用,把该值调大,能放慢命令的执行vacuum_cost_limit200500清理delete后的空间,此时对io影响较大,进步该值缩小对性能的影响max_worker_processes8128最大并发过程数,parallel worker等都算作worker process,该值要设置的足够大max_parallel_workers_per_gather24每个执行节点的最大并行处理过程数,应用并行查问时设置该值大于1,不倡议超过主机cores-2max_parallel_workers88并行查问时,最大线程数wal_buffers4MB 用于wal的内存大小,设置为shared_buffers/32,设置为-1示意按shared_buffers计算max_wal_size1GB256GB小的时候wal日志写入量大,越大,解体复原工夫越长min_wal_size80MB64GB倡议是shared_buffers的一半check_point_timeout5min30minwal查看写入磁盘的工夫距离log_destinationstderrcsvlog日志文件输出地log_truncate_on_rotationoffon删除同名的日志文件

December 4, 2020 · 1 min · jiezi

关于postgresql:七大奖项花落各家2020年度PG中国技术评选颁奖典礼回顾

继去年推出首届PG中国技术评比之后,第二届PG中国技术评比七个奖项在2020PG亚洲大会主论坛隆重公布,以展示国内对PG产业和技术倒退起重大推动与奉献作用的企业、产品与行业首领。 PG年度翻新企业作为亚太地区PostgreSQL开源技术最大的贡献者,瀚高软件从去年六月份至今,已在国内PostgreSQL社区发表高质量技术文章七十余篇,提交社区代码五万余行,审阅社区补丁近百个,并屡次进行国内社区在线技术培训,瀚高研究院的博客屡次发表国内社区技术文章,曾被评为最受欢迎和共享的博客。同时,公司也曾位列PostgreSQL国内社区官网Blog零碎顶级奉献团队榜首。 PG年度最佳产品云数据库专属集群MyBase是阿里云专为企业级用户定制优化的解决方案,反对MySQL、PostgreSQL、SQL Server、Redis数据库。具备云资源独享、反对资源超调配,资源峰谷调度治理、自主可运维、凋谢局部数据库和OS权限等特点。云数据库专属集群为客户独享云资源更加平安,用户既享受到云数据库服务的便捷灵便,又满足企业对数据库合规性、安全性和高性能的要求。TBase是腾讯数据库团队在开源Postgres根底上自主研发出的先进的企业级分布式HTAP数据库管理系统,一方面解决了传统数据库扩大有余、数据sharding之后数据库事务的严格一致性难题、数据安全、跨地区容灾等问题,同时提供了高性能事务处理、数据治理、混合负载反对等能力,能够轻松应答亿级数据的存储、剖析和查问,采纳无共享的集群架构,实用于PB级海量 HTAP 场景。 PG年度翻新解决方案 PG年度最佳利用案例金风科技整体装机容量世界第一,风电场遍布世界各地,软件主营业务为scada零碎,底层数据存储齐全应用开源数据库postgresql,全世界部署1000+多套数据库,应用的数据库模式有单节点、高可用、分布式,跟国内国产数据库瀚高具备互认兼容证实,提供给电网侧做数据采集接入应用,稳固运行scada零碎曾经三年多。 PG行业卓越贡献奖 PG年度硬件解决方案浪潮始终引领着我国信息技术翻新倒退,自主研发的K1要害利用主机曾荣获“国家科技进步一等奖”。IPS传承了浪潮在高端服务器零碎设计畛域的技术积攒,联合Power处理器的性能、性能、可靠性等劣势,面向中国及“一带一路”国家市场,自主研发、生产、销售兼具纵向扩大和横向扩大个性的K1Power系列服务器产品,为用户定制化打造安全可靠,自主可控的整体解决方案,以及本地化提供业余、麻利的软件及技术支持服务与保障。 PG一生成就奖彭智勇,中国计算机学会数据库专委会副主任、武汉大学传授、博导。原武汉大学计算机学院副院长、大数据研究院副院长,软件工程国家重点实验室副主任。国务院软件工程学科评议组成员,享受国务院特殊津贴专家。中国计算机学会会士、数据库专委会副主任委员,大数据专委会委员,珞珈学者特聘传授,原信息产业部数据库规范工作组成员。原美国惠普公司研究员。国内最早从事PostgreSQL数据库技术钻研专家。IEEE计算机协会和ACM数据库业余协会会员,WISE2006、DASFAA2012程序委员会主席,DASFAA2013大会主席,WAIM、SteeringCommittee副主席,VLDB中国数据库学院副院长,CCF武汉分部主席,曾获国防科工委科技进步一等奖、教育部科技进步二等奖、武汉大学科技进步一等奖等重大奖项。 更多精彩内容,请关注以下平台、网站: 中国PostgreSQL分会官网公众号(技术文章、技术流动):开源软件联盟PostgreSQL分会 中国PostgreSQL分会技术问答社区:www.pgfans.cn 中国PostgreSQL分会官方网站:www.postgresqlchina.com

November 27, 2020 · 1 min · jiezi

关于postgresql:空前绝后PostgresConfCNPGConfAsia-2020大会闭幕

2020年11月17日-20日,PostgresConf.CN & PGconf.Asia2020大会(简称2020 PG亚洲大会)通过线上隆重召开!本次大会由中国开源软件推动联盟PG分会、PostgresConf国内会议组织、PGConf.Asia亚洲社区联结举办,墨天轮技术社区为独家单干直播平台,美国PGCENTRAL 基金会、俄罗斯PG社区、日本PG用户组、印尼PG用户组、泰国PG用户组、欧洲PG社区联结协办,同时失去了PostgreSQL国内社区全力支持与帮忙,被列为Postgresql.org社区官网寰球金标会议。本次大会集中国PG力量和亚洲次要PG贡献者、利用企业独特打造成为亚洲范畴内最大规模的PG生态会议。本届大会继续4天,规模空前。累计14个频道,别离是阿里云数据库培训专场、腾讯云数据库培训专场、瀚高软件培训专场、PG培训机构公益专场、PG英文培训专场共5个培训频道,以及主论坛(2天)、中文分论坛(2天)、英文分论坛A(2天)、英文分论坛B(2天)、CCF高级学术论坛共9个主/分论坛培训频道。 本届大会嘉宾规模再创历史。大会以“生而寰球”为主题,共凝聚112场次技术报告。共计一百余名国内外出名专家、学者,为宽广PGer提供了一场技术的饕餮盛宴。包含中国工程院院士倪光南,中国开源软件推动联盟副主席、中科院研究员刘澎,中国计算机学会数据库专委会副主任彭智勇,PostgreSQL国内社区联结创始人、EDB副总裁Bruce Momjian,PGconf.Asia和日本PG用户会创始人、Pgpool-ll原始作者Tatsuo Ishii;来自阿里、腾讯、亚马逊、京东、浪潮、安全、苏宁、中兴、HornetLab、Equnix、VMware Greenplum、yMatrix、瀚高软件、云和恩墨、Percona、EDB、NTT、Postgres Professional、富士通、亚信、巨杉、美创、文武、国信司南、海能达、Airwallex、Ottertune等泛滥生态企业专家;来自武汉大学、华东师范大学、哈尔滨工业大学、山东大学、天津大学的多位CCF(中国计算机学会)数据库专委会委员;以及10家出名受权PG培训服务提供商的业余讲师。 本届大会观众人数再创历史。各频道累计点击量3万+,国内公众号文章累计浏览量5万+,全网新闻资讯报道及收录超过3000条目。PostgresConf是面向寰球PostgreSQL开发者和使用者的年度盛会。本届大会吸引了来自寰球的PostgreSQL社区的核心成员及应用PostgreSQL的企业用户、个人用户。 倪光南院士致辞大会首先由中国工程院院士,中国根底软件行业泰斗倪光南做收场演讲,倪院士首先对本次大会的举办示意热烈祝贺,向参会的各国代表和开源专家示意诚挚的问候。他指出开源是当今世界倒退的重要趋势,开源技术正在粗浅扭转寰球数字经济和信息产业格局。这次PG亚洲大会的举办,对倒退开源产业,推动开源静止和开源文化在中国的遍及,增强国际交流与单干,都有很高的价值意义。倪院士心愿可能通过PGConf亚洲会议这个平台实现亚洲乃至寰球的智力交换,实现更高畛域、更高层次寰球单干,为寰球开源技术倒退贡献力量。最初倪院士预祝大会获得圆满成功,并祝福PG开源生态更加凋敝!祝福中国PG分会和亚洲PG社区方兴未艾,越来越好。 刘澎副主席致辞中国开源软件推动联盟常务副主席,中科院软件所研究员刘澎代表COPU致辞。他在致辞报告中指出,基于凋谢的BSD许可证+去中心化的生态架构,让PostgreSQL在过来,当初及将来,都具备永久性平安保障。遵循自由软件精力&恪守BSD开源协定的PostgreSQL合乎最严苛的平安合规性审计,且不受美国技术进口管制管辖权限度(长臂管辖权限度/US Export Controls),是公认的产权私有的全球性技术。寰球PG贡献者致力推动自由民主软件静止,保障任何人获取与应用它的权力。 主论坛-大咖星散 PostgreSQL国内社区联结创始人、EDB副总裁Bruce Momjian做《Will Postgres Live Forever》分享。他示意任何事务都有它的生命周期,开源PG也不例外,但绝对闭源商业软件,开源软件的生命周期会更有生命力。PGconf.Asia和日本PG用户会创始人、Pgpool-ll原始作者Tatsuo Ishii做《Wonderful PostgreSQL!》分享。Tatsuo Ishii依据Gray的事务论文,凭一己之力写出WAL零碎,创造力令人钦佩。Percona公司CEO Peter Zaitsev做《The Changing Landscape of Open Source Databases》分享。他总结了分布式、云原生、存储计算拆散、硬件加速等几个要点,基本上涵盖了目前数据库技术倒退次要关键词。CCF中国计算机学会数据库专委会副主任、武汉大学计算机学院副院长、博导-彭智勇传授做《My  Way from PG to TOTEM》分享。彭传授娓娓道来在他三十多年数据库科研历程中,从率领学生深刻PG源码钻研数据库模型,到编写PG内核剖析教材,再到研制图腾(TOTEM)数据库的历程。云和恩墨创始人盖国强做《相象而行: 从Oracle到PostgreSQL DBA的技能迁徙》演讲。盖老师通过一个PG典型的回卷问题,从源码角度给出了原理剖析,激励大家玩转开源数据库能够深刻源码学习,强调DBA对于企业数据管理至关重要,每个DBA更要通过自我职业涵养,体现集体价值。Greenplum中国创始人兼GM冯雷做《Greenplum的开源之旅:生态和社区领导力》分享。浪潮商用机器公司技术支持部总经理房树新做《K1 Power与PostgreSQL 助力企业新常态新外围建设》分享。阿里云数据库产品总经理、数据库产品与经营负责人叶正盛(斗佛)做《浅谈数据库发展趋势》分享。腾讯云数据库副总经理王义成做《每一笔微信领取背地的数据库》分享。瀚高软件首席科学家郑晓军做《商业数据库技术创新回顾》分享。以其30年出名数据库公司高管经验,具体论述了30年来商业数据库重大翻新事件,对将来数据库倒退有重要指引意义。阿里巴巴团体研究员、数据库产品事业部OLAP产品部负责人占超群做《云原生数据仓库的时机和挑战》分享。腾讯云TBase数据库技术总监李跃森做《腾讯HTAP数据库TBase OLAP技术演进之路》分享。其余主论坛演讲还包含:美国青年倒退非营利组织Mouse协会理事长Lindsay Hooper做《pay it forward》分享;日本SRAOSS,Inc.公司首席工程师彭博做《在Kubernetes上部署具备查问负载平衡和监控性能的PostgreSQL集群》分享;阿里云数据库高级产品专家韩国盛做《传统数据库异构上云实际》分享;阿里云数据库高级产品专家周正中(德哥)做《下一代云数据库状态》分享;成都文武信息技术有限公司创始人朱贤文做《数据库云化--方向,门路和技术》分享;中国计算机行业协会常务理事韩锋做《乘云而上,ADB云原生数仓倒退之路》分享;巨杉数据库资深总监萧少聪做《跨PG、MySQL的Multi-Master横向扩大》分享等。因篇幅无限,将会在后续继续公布大会具体回顾系列文章。在此对上述主论坛嘉宾致以诚挚感激! 主论坛-五大典礼重磅公布1)2020年度PG中国技术评比公布典礼:继去年推出首届PG中国技术评比之后,第二届PG中国技术评比七个奖项19日在主论坛下午正式揭晓,并面向寰球公布,以展示国内对PG产业和技术倒退起重大推动与奉献作用的企业、产品与行业首领。 2)首批PG ACE/PG ACE搭档 公布典礼:基于PostgreSQL在中国倒退的良好态势,2020年下半年,由中国开源软件推动联盟PostgreSQL分会隆重推出“中国PostgreSQLACE打算”,用来推动更多的国内从业者参加PostgreSQL生态建设,以及抵赖和表彰那些在国内PostgreSQL产业倒退、技术交换和推广应用方面卓有奉献的人士。 3)“中国PG培训认证”PGCM巨匠认证考试首次正式公布典礼:中国PostgreSQL培训认证由中国开源软件联盟PostgreSQL分会携手工信部中国电子工业标准化技术协会、专业培训机构联结打造,并列入“中国电子信息行业业余人才培养工程”之中。其目标是为国内IT从业者提供PostgreSQL技术培训服务,并迷信、公正地对从业人员进行职业资格、业余技术资格认定和业余技术水平测试。中国PostgreSQL培训认证分为PGCA高级、PGCE中级和PGCM高级。 4)中国开发者社区及自主开源协定公布典礼 5)首届高校PG比赛公布典礼 英文分论坛本届大会英文分论坛嘉宾包含PostgreSQL寰球开发组联结创始人Bruce Momjian、Percona公司CEOPeter Zaitsev、yMatrix公司创始人Yandong Yao、HornetLab Technology公司副总裁Ahsan Hadi、日本NTT研究员Yuya Watari、Equnix Business Solutions公司CTO Lucky Haryadi、Percona公司PostgreSQL参谋Ibrar Ahmed、AWS首席数据库工程师Jim Mlodgenski、瀚高软件资深开发工程师Cary Huang、Equnix Business Solutions 公司CEO Julyanto SUTANDANG、2ndQuadrant(EDB)资深PostgreSQL架构师Ashutosh Bapat、HornetLab Technology公司资深软件工程师Asif Rehman、资深DBA Ujang Jaenudin、阿里云数据库高级产品专家Xiang Zhou、HornetLab Technology公司资深软件工程师Hamid Akhtar、日本SRA OSS 首席科学家Yugo Nagata、Equnix Business Solutions 公司CTO Lucky Haryadi、Postgres Professional公司开发工程师Andrey Lepikhov、Crunchy Data Solutions 资深数据架构师David Steele、AWS软件开发经理Jignesh Shah、AWS首席数据库工程师Jim Mlodgenski、Fujitsu公司资深总监Amit Kapila、HornetLab Technology公司资深软件工程师Muhammad Usama、Memhive的联结创始人Naresh Kumar Inna 和 Keshav Prasad等人。因篇幅无限,将会在后续继续公布大会具体回顾系列文章。在此对上述英文分论坛嘉宾致以诚挚感激! ...

November 27, 2020 · 1 min · jiezi

关于postgresql:2020PG亚洲大会中国PG-ACE伙伴发布仪式精彩回顾

前言PostgreSQL于2017、2018间断两年荣膺“寰球年度数据库”,更荣获2019年“O’Reilly一生成就奖”,这是继Linux之后第二个取得该奖的开源产品。PostgreSQL因其稳定性和功能集而备受青眼,已成为国内诸多开发人员首选数据库,从业人员和爱好者已成规模。 PostgreSQL ACE在扑克牌里,ACE是最大的一张牌。同时,ACE还有另外一层意思,在生活中,ACE往往寓意着“一流顶尖、最好最优良”。 基于PostgreSQL在中国倒退的良好态势,由中国开源软件联盟PostgreSQL分会隆重推出“中国PostgreSQL ACE打算”,用来推动更多的从业者参加PostgreSQL生态建设,以及抵赖和表彰那些在国内PostgreSQL产业倒退、技术交换和推广应用方面卓有奉献的人士。 面向人群“PostgreSQL ACE打算”面向以下两类人群: 1)沉闷的社区首领——PostgreSQL技术专家,包含但不限于布道者、代码贡献者、架构师、DBA、产品经理、内核研发、售前工程师、DEV等。他们对PG及其相干产品十分理解,有着丰盛的应用教训。关注他们发表、分享和探讨的内容有助于您随时理解PG技术动静和优良实际。 这些人技术娴熟并且乐于分享他们的常识和教训。他们是相应畛域的专家,并且有强烈的志愿分享常识和教训,包含但不限于:发现PostgreSQL bug、提交补丁数或性能扩大数;撰写PostgreSQL技术文章、博客或书籍;PGFans等技术社区内的沉闷者;热心于在各类流动中做PostgreSQL技术分享等。 2)生态实际先驱——PostgreSQL生态建设参与者,包含但不限于高级管理人员、社群组织者、培训机构讲师、高校老师等。 这些人对PostgreSQL生态建设添砖加瓦。他们能让更多的人接触、理解和参加PostgreSQL,包含但不限于:各地的PostgreSQL用户会组织者;PostgreSQL技术群群主;PostgreSQL技术会议、沙龙组织者;PostgreSQL培训认证建设者、讲师;对PostgreSQL有钻研奉献的高校教师;在PostgreSQL推广、利用方面做出成绩的媒体工作者、市场从业者等。 首批PG ACE搭档公布典礼中国首批PG ACE搭档在2020 PG亚洲大会主论坛下午正式揭晓。 更多精彩内容,请关注以下平台、网站: 中国PostgreSQL分会官网公众号(技术文章、技术流动):开源软件联盟PostgreSQL分会 中国PostgreSQL分会技术问答社区:www.pgfans.cn 中国PostgreSQL分会官方网站:www.postgresqlchina.com

November 26, 2020 · 1 min · jiezi

关于postgresql:PostgresConfCN2020PGconfAsia亚洲大会精彩回顾

PostgresConf.CN2020&PGconf.Asia亚洲大会各主分论坛通过墨天轮平台线上盛大举行!本次大会由中国开源软件推动联盟PG分会、PostgresConf国内会议组织、PGconf.Asia亚洲社区联结举办,美国PGCENTRAL 基金会、俄罗斯PG社区、日本PG用户组、印尼PG用户组、泰国PG用户组、欧洲PG社区协办。同时失去了PostgreSQL国内社区全力支持与帮忙,被列为Postgresql.org社区官网寰球金标会议。 PostgresConf是面向寰球PostgreSQL开发者和使用者的年度盛会。本届大会吸引了来自寰球的PostgreSQL社区的核心成员及应用PostgreSQL的企业用户、个人用户。经统计,主分论坛单日登陆量冲破八千人。 本次大会以“生而寰球”为主题,共有112场次技术分享。共计一百余名国内外出名专家,包含中国工程院院士倪光南,以及来自阿里、腾讯、京东、浪潮、安全、亚马逊、Pivotal、瀚高、云和恩墨、EDB、NTT、富士通等泛滥生态企业专家分享,同时更首次举办了高级学术子论坛,邀请到来自武大、山大、哈工大、华东师大、天大的多位CCF(中国计算机学会)数据库专委会委员参会做学术报告。为宽广PGer提供了一场技术的饕餮盛宴。 大会首先由中国工程院院士,中国根底软件行业泰斗,国家科技进步一等奖获得者倪光南做收场演讲,倪院士首先对本次大会的举办示意热烈祝贺,向参会的各国代表和开源专家示意诚挚的问候。他指出开源是当今世界倒退的重要趋势,开源技术正在粗浅扭转寰球数字经济和信息产业格局。这次PG亚洲大会的举办,对倒退开源产业,推动开源静止和开源文化在中国的遍及,增强国际交流与单干,都有很高的价值意义。倪院士心愿大家可能通过这次会议踊跃交换,实现更高层次单干。为寰球开源技术倒退贡献力量。最初倪院士预祝大会获得圆满成功,并祝福PG开源生态更加凋敝!中国PG分会和亚洲PG社区方兴未艾,越来越好。 随后,中国开源软件推动联盟常务副主席,中科院软件所研究院刘澎,代表COPU致辞,他在致辞报告中指出,基于凋谢的BSD许可证+去中心化的生态架构。让PostgreSQL在过来,当初及将来,都具备永久性平安保障。遵循自由软件精力&恪守BSD开源协定的PostgreSQL合乎最严苛的平安合规性审计,且不受美国技术进口管制管辖权限度(长臂管辖权限度/US Export Controls),是公认的产权私有的全球性技术。寰球PG贡献者致力推动自由民主软件静止,保障任何人获取与应用它的权力。 刘澎主席指出将来中国的新增长极、翻新极,在信息技术翻新产业,在ICT的要害基础产业。信息基础产业的外围是人才与生态,全力倒退为数不多的能够释怀成长的开源技术、国际性技术、要害根底技术、具备寰球生态性的技术,是中国减速要害技术产业倒退,强化根底布局的次要门路。正因为此,PostgreSQL技术的生态稀缺性逐步彰显。 在随后的正式报告阶段,大会各主分论坛顺次开展,在主论坛,PostgreSQL国内社区联结创始人、EDB副总裁Bruce Momjian,PGconf.Asia和日本PG用户会创始人、Pgpool-ll原始作者Tatsuo Ishii,中国计算机学会数据库专委会副主任、武汉大学计算机学院副院长、博导,彭智勇传授,云和恩墨创始人盖国强,瀚高软件首席科学家郑晓军,阿里云智能数据库产品总经理叶正盛,腾讯云数据库副总经理王义成等别离进行了专题演讲。 在各个中文分论坛和英文分论坛,来自阿里、腾讯、京东、浪潮、安全、亚马逊、Pivotal、瀚高、云和恩墨、EDB、NTT、富士通等在内的泛滥生态企业专家别离进行了主体技术分享,利用案例剖析等,为宽广PGer带来了十分多解渴的技术甘露。(因篇幅无限,将会在后续继续公布大会具体回顾系列文章) 最初阶段,在压轴的多个重大典礼集中公布环节,多个分量奖项、启动和公布典礼向公众揭开了面纱,包含:2020中国PG技术评比公布典礼、中国PG ACE公布典礼、中国PGCM认证考试首次正式公布典礼、中国开发者社区及盘古协定公布典礼、以及首届全国高校PG技术能力比赛公布典礼等集中颁布。 更多精彩内容,请关注以下平台、网站: 中国PostgreSQL分会官网公众号(技术文章、技术流动):开源软件联盟PostgreSQL分会 中国PostgreSQL分会技术问答社区:www.pgfans.cn 中国PostgreSQL分会官方网站:www.postgresqlchina.com

November 26, 2020 · 1 min · jiezi

关于postgresql:2020-PostgreSQL亚洲大会腾讯云数据库专场精彩回顾

腾讯云数据库专家工程师伍鑫做《TBase开源分布式数据库——HTAP畛域摸索》分享。 腾讯云数据库高级工程师林锦做《CynosDB for PG——存储集群治理》分享。 腾讯云数据库专家工程师邹立贤做《CynosDB for PG——主从架构》分享。 腾讯云数据库高级工程师章爱国做《CynosDB for PG——备份与复原》分享。 腾讯云数据库产品经理唐阳做《PG 能够用来干什么》分享。 腾讯云数据库高级工程师黄辉做《TencentDB for PG——高可用实际》分享。 腾讯云数据库高级工程师唐颋做《TencentDB for PG——serverless》分享。 腾讯云数据库高级工程师张治春做《期待事件-buffer_content剖析》分享。 在云原生赛道上,腾讯云发表自研新一代企业级分布式数据库CynosDB正式商业化,成为首批通过工信部信通院可信云《云原生数据库服务》测试的云数据库厂商。不同于过来云数据库在传统数据库之上扩大一部分云的能力,CynosDB是纯正的云原生数据库,交融了传统数据库、云计算和新硬件的劣势,反对无限量存储、百万级查问和秒级的故障复原,单节点130万QPS读性能,100%兼容MySQL和PostgreSQL,遥遥领先国内其余同类产品。 TBase是腾讯自主研发的企业级HTAP数据库系统,集集中式与分布式能力于一身,具备事务处理和剖析解决双引擎能力,高度兼容PostgreSQL,Oracle兼容达95%以上,具备高扩展性、残缺的分布式事务反对、弱小的平安能力、多级容灾能力以及多维度资源隔离等能力。对内撑持了微信领取业务,曾经胜利利用在金融、政府、电信、医疗等行业的外围业务零碎,实用于GB~PB级的海量HTAP场景。 对于PostgresConf.CN&PGConf.Asia2020大会作为寰球最大、最出名的PG序列会议,从纽约到莫斯科,从里约热内卢到约翰内斯堡,寰球各地区都有PGConf在运行。而亚洲规格最高的PG技术盛会—PGConf.Asia大会,将于往年11月首度在中国举办。中国开源软件联盟PG分会作为东道主承办本次会议,采纳线上模式面向寰球直播。本次大会将集中国PG力量和亚洲次要PG贡献者、利用企业独特打造亚洲范畴内最大规模的PG生态会议。 本届PGConf.Asia大会将与PostgresConf.CN中国大会联结举办。PostgresConf.CN中国大会同样是列入PostgresConf会议序列的寰球正式会议,同时也是中国区规模最大、规格最高的PG生态会议,自2017年起,已间断举办三届。往年的大会将持续立足于国内PG行业,为观众提供最清晰、最独特的视角。 更多精彩内容,请关注以下平台、网站: 中国PostgreSQL分会官网公众号(技术文章、技术流动):开源软件联盟PostgreSQL分会 中国PostgreSQL分会技术问答社区:www.pgfans.cn 中国PostgreSQL分会官方网站:www.postgresqlchina.com

November 25, 2020 · 1 min · jiezi

关于postgresql:2020-PostgreSQL亚洲大会阿里云数据库专场精彩回顾

阿里云数据库高级产品专家周祥做《Cloud Native Database Products for PostgreSQL on Alibaba Cloud》分享。 阿里云数据库资深技术专家魏闯先做《云原生数据仓库TPC-H第一背地的Laser引擎大揭秘 》分享。 阿里云数据库技术专家樊智辉做《UniqueKey: 让你的查问跑的更快 》分享。 阿里云数据库高级技术专家曾文旌做《Implementation of GLobal Temp Table》分享。 阿里云数据库高级技术专家王涛做《RDS PostgreSQL管控体系介绍》分享。 阿里云数据库高级技术专家王旭做《DTS及其在PG数据库生态中的利用》分享。 阿里云数据库解决方案架构师樊文凯做《PG数据库生态选型思路与最佳实际》分享。 阿里云数据库高级运维工程师王健做《阿里云数据库高级运维工程师》分享。 对于PostgresConf.CN&PGConf.Asia2020大会作为寰球最大、最出名的PG序列会议,从纽约到莫斯科,从里约热内卢到约翰内斯堡,寰球各地区都有PGConf在运行。而亚洲规格最高的PG技术盛会—PGConf.Asia大会,将于往年11月首度在中国举办。中国开源软件联盟PG分会作为东道主承办本次会议,采纳线上模式面向寰球直播。本次大会将集中国PG力量和亚洲次要PG贡献者、利用企业独特打造亚洲范畴内最大规模的PG生态会议 本届PGConf.Asia大会将与PostgresConf.CN中国大会联结举办。PostgresConf.CN中国大会同样是列入PostgresConf会议序列的寰球正式会议,同时也是中国区规模最大、规格最高的PG生态会议,自2017年起,已间断举办三届。往年的大会将持续立足于国内PG行业,为观众提供最清晰、最独特的视角。 更多精彩内容,请关注以下平台、网站: 中国PostgreSQL分会官网公众号(技术文章、技术流动):开源软件联盟PostgreSQL分会 中国PostgreSQL分会技术问答社区:www.pgfans.cn 中国PostgreSQL分会官方网站:www.postgresqlchina.com

November 24, 2020 · 1 min · jiezi

关于postgresql:刘澎全球技术竞争加剧背景下PG具有生态稀缺性

2020年11月17日-20日, PostgresConf.CN & PGconf.Asia2020大会隆重召开!PGconf是面向寰球PostgreSQL开发者和使用者的年度盛会。本届大会规模再创历史。共凝聚112场技术报告。共计一百余名PostgreSQL社区的核心成员、国内外开源根底软件畛域出名专家、学者进行了直播分享。4天的会议周期累计观看的PG爱好者超过3万人,在线实时人数峰值超过8000人,观众现场反应热烈,对PG在国内外的倒退现状与前景均寄托了很大冀望。 19日大会主论坛邀请了中国开源软件推动联盟副主席兼秘书长、中科院研究员刘澎代表COPU致辞并作主题报告。刘澎副主席首先对PGconf亚洲大会的举办示意热烈祝贺,对各界敌人对开源事业和PG产业的反对,示意真挚敬意。报告中他指出PG是寰球当先的数据库技术,曾经稳固倒退30年,目前仍然出现茁壮的生命力和强烈的回升势头,这与宽广PG技术从业者和相干厂商的致力密不可分。PostgreSQL多年来保持稳定迭代,不为任何商业实体掌控的PostgreSQL领有开源技术畛域最具全球性的外围贡献者社区。同时PG作为一个胜利的开源软件,对社会的价值,对经济的奉献,乃至对中国根底软件倒退和进步都有微小的意义。 刘澎指出,PG基于BSD协定的凋谢生态架构。使其有着独特的、永久性的平安保障。合乎最严苛的平安合规性审计,且不受美国技术进口管制管辖权限度(长臂管辖权限度/US Export Controls),是公认的产权私有的全球性技术。 刘澎认为,将来中国的新增长极、翻新极,在信息技术翻新产业,在ICT的要害基础产业。信息基础产业的外围是人才与生态,全力倒退为数不多的能够释怀成长的开源技术、国际性技术、要害根底技术、具备寰球生态性的技术,是中国减速要害技术产业倒退,强化根底布局的次要门路。正因为此,PostgreSQL技术的生态稀缺性逐步彰显。而PGconf会议是一个十分好的平台,能够继续一直的组织、推动亚洲PG贡献者、利用企业汇聚一起独特摸索PG的倒退、将来以及在亚洲的作用与价值。 刘澎最初示意PGconf.Asia首次来华,是十分好的契机,心愿借此大会,宽广的国内外PG产业人士,可能施展开源共享精力,踊跃分享,充沛交换,播种价值。 中国工程院倪光南院士,CCF中国计算机学会数据库专委会副主任彭智勇传授、PostgreSQL国内社区联结创始人Bruce Momjian、PGconf.Asia和日本PG用户会创始人、Pgpool-ll原始作者Tatsuo Ishii等专家学者先后发表致辞和演讲。示意了对PG生态的必定和对PG在国内倒退的冀望。 截止当初,PG已倒退到13.1版本,在DB-Engine权威寰球数据库排名中稳居第四,按照目前趋势,五年内PG将会取代SqlServer,进军数据库领军者营垒。非商业性开源的PostgreSQL领有最具全球性外围贡献者社区,寰球开发者社区稳固运行超过25年,随着寰球技术经济竞争加剧,技术打击封闭的强烈化趋势,PostgreSQL技术的生态稀缺性逐步彰显。中国开源软件推动联盟PG分会将会与合作伙伴们同心同行,共进共赢。在PG最好的时代全力以赴,独特谱写PG倒退的新篇章! 更多精彩内容,请关注以下平台、网站: 中国PostgreSQL分会官网公众号(技术文章、技术流动):开源软件联盟PostgreSQL分会 中国PostgreSQL分会技术问答社区:www.pgfans.cn 中国PostgreSQL分会官方网站:www.postgresqlchina.com

November 23, 2020 · 1 min · jiezi

关于postgresql:倪光南PG亚洲大会需要实现更高领域更高层次全球合作

在19日举办的PostgresConf.CN & PGconf.Asia2020大会主论坛上,包含倪光南院士在内的多位根底软件和开源领域专家进行了重要分享。PGconf是面向寰球PostgreSQL开发者和使用者的年度盛会。本次大会作为PG国内社区外围金标会议。共凝聚112场技术报告。共计110名PostgreSQL社区的核心成员、国内外开源根底软件畛域出名专家、学者与会分享。4天的会议周期累计观看人数超过3万人,线上反应热烈,对PG在国内外的倒退现状与前景均寄托了很大冀望。 大会主论坛收场演讲邀请了中国工程院院士,中国根底软件行业泰斗倪光南,倪光南院士首先对PGconf亚洲大会的举办示意热烈祝贺,向参会的各国代表和开源专家示意诚挚的问候。他指出开源是当今世界倒退的重要趋势,开源技术正在粗浅扭转寰球数字经济和信息产业格局。这次PG亚洲大会的举办,对倒退开源产业,推动开源静止和开源文化在中国的遍及,增强国际交流与单干,都有很高的价值意义。倪院士殷切期望会议主办方和宽广与会嘉宾,可能通过PGconf亚洲会议这个平台实现亚洲乃至寰球的智力交换,实现更高畛域、更高层次寰球单干。为寰球开源技术倒退贡献力量。演讲的最初倪院士预祝大会获得圆满成功,并祝福PG开源生态更加凋敝! 中国开源软件推动联盟副主席兼秘书长、中科院研究员刘澎、CCF中国计算机学会数据库专委会副主任彭智勇传授PostgreSQL国内社区联结创始人Bruce Momjian、PGconf.Asia和日本PG用户会创始人、Pgpool-ll原始作者Tatsuo Ishii等专家学者陆续进行线上报告。 截止当初,PG已倒退到13.1版本,在DB-Engine权威寰球数据库排名中稳居第四,按照目前趋势,五年内PG将会取代SqlServer,进军数据库领军者营垒。非商业性开源的PostgreSQL领有最具全球性外围贡献者社区,寰球开发者社区稳固运行超过25年,随着寰球技术经济竞争加剧,技术打击封闭的强烈化趋势,PostgreSQL技术的生态稀缺性逐步彰显。 将来中国的新增长极、翻新极,在信息技术翻新产业,在ICT的要害基础产业。信息基础产业的外围是人才与生态,全力倒退为数不多的能够释怀倒退的开源技术、国际性技术、要害根底技术、具备寰球生态性的技术,是中国减速关键技术畛域产业倒退,强化根底布局的惟一门路。正因为此,PG开源生态还需进行跨越式倒退,承当更为重要的生态使命! 更多精彩内容,请关注以下平台、网站: 中国PostgreSQL分会官网公众号(技术文章、技术流动):开源软件联盟PostgreSQL分会 中国PostgreSQL分会技术问答社区:www.pgfans.cn 中国PostgreSQL分会官方网站:www.postgresqlchina.com

November 23, 2020 · 1 min · jiezi

关于postgresql:嘉宾专访2020-PostgreSQL亚洲大会阿里云数据库专场王健

2020 PostgreSQL亚洲大会组委会特地推出阿里云数据库嘉宾系列线上专访,第八期咱们邀请到了阿里云数据库高级运维工程师王健。他将在11月17日阿里云数据库培训专场15:30-16:10时间段带来《PostgreSQL CDC最佳实际》分享。 王健 | 阿里云数据库高级运维工程师Q1:您能简略介绍一下本人吗?您是如何与PostgreSQL社区互动的?王健:大家好,我的名字叫王健,花名叫绛云,2018年退出阿里巴巴,之前是在一家国产数据库厂商工作,我大略是从2015年刚接触到pg这个数据库。在学习的过程中,有德哥这样的大牛博客学习参考,也有共事的帮忙,在一直理解pg的过程,就开始参加一些社区的大会及流动,意识更多的同学,技术也通过一直地交换和学习有了很大的晋升。参加社区活动是个很好晋升本人的机会,能够意识很多技术大牛,同时也能晓得pg最新的动静和关注的技术点。 Q2:您在产品布局或产品研发中遇到困难个别会如何解决?最让您感觉骄傲(乏味)的事是什么?王健:在学习pg的过程,都是先从官网文档,德哥博客等开始来学习,遇到问题会先查阅官网文档,或者德哥博客等,再起初会开始看一些国外的技术博客,例如edb以及第二象限,Crunchy Data等,相熟pg的敌人可能晓得,pg有着丰盛的插件,关上github后会发现一个新的宝藏,发现有大量的好用的pg插件等着你去开掘。最初阶段就开始学习pg的内核的代码,发现有很多问题,可能在搜索引擎无奈找到,就会去查看代码和手动去调试,帮忙本人解决问题,同时也能学习到数据库的原理。最乏味的事件就是解决一个困扰已久的问题,就会播种极大的满足感。 Q3:您认为数据库产品将来如何倒退才会更有生命力?王健:首先是性能层面要更合乎企业级用户的应用场景,其次升高新用户的上手难度,能让更多的用户很简略的就能用好数据库。 Q4:最初,您对想从事PG产品或技术研发的网友们有什么倡议吗?王健:放弃好奇心,须要有打破砂锅问到底的精力,多实际,多去摸索。 2020 PostgreSQL亚洲大会阿里云数据库专场2020年11月17日,从早到晚,八位原厂讲师,八场干货分享,全中文在线直播,尽在PostgresConf.CN & PGConf.Asia 2020大会阿里云数据库专场频道,期待你的退出! 对于阿里云数据库阿里云智能数据库产品事业部承载着阿里云、阿里巴巴团体所有在线数据以及数据服务,提供从在线事务处理到在线剖析解决的全栈数据库产品和服务,反对私有云、专有云各种环境下的灵便部署,集体开发者、中小企业到寰球大规模企业业务全笼罩。无论是集体还是最为严苛的企业业务需要,阿里云数据库服务都是最为牢靠、高效的抉择。随着数据时代的到来,阿里云数据库产品基于云计算和数据中心的架构从新进行设计实现,在数据库存储引擎、云原生技术、剖析引擎、分布式解决、FPGA/GPU硬件加速、智能数据库、智能化管控平台、平安数据库等方面都处于寰球当先地位,全面的云产品和服务组合,为阿里云客户以及阿里巴巴团体多元化业务提供了丰盛的数据库产品解决方案和行业教训。 目前通过十余年的利用实际以及技术迭代,阿里云领有国内最弱小和丰盛的云数据库产品家族,涵盖关系型数据库、非关系型数据库、剖析型数据库、数据库生态工具以及云数据库专属集群5大板块,满足用户不同的数据库利用开发需要,并且解决企业外围业务上云的要害难题。 外围产品外围产品包含:自研云原生关系型数据库PolarDB、云原生数据仓库AnalyticDB和云原生数据湖剖析DLA、云原生多模数据库Lindorm、云数据库专属集群MyBase以及关系型数据库服务RDS,非关系型数据库服务NoSQL产品HBase、Redis、MongoDB、GraphDB,数据库生态工具DTS/DMS/DBS/ADAM,智能化运维平台DAS等。 其中,PolarDB是国内首个云原生关系型数据库,采纳存储计算拆散、软硬一体化设计,满足大规模利用场景需要。 PostgreSQL阿里云数据库专场-钉钉交换群 对于PostgresConf.CN&PGConf.Asia2020大会作为寰球最大、最出名的PG序列会议,从纽约到莫斯科,从里约热内卢到约翰内斯堡,寰球各地区都有PGConf在运行。而亚洲规格最高的PG技术盛会—PGConf.Asia大会,将于往年11月首度在中国举办。中国开源软件联盟PG分会作为东道主承办本次会议,采纳线上模式,通过墨天轮社区面向寰球直播。本次大会将集中国PG力量和亚洲次要PG贡献者、利用企业独特打造亚洲范畴内最大规模的PG生态会议。 本届PGConf.Asia大会将与PostgresConf.CN中国大会联结举办。PostgresConf.CN中国大会同样是列入PostgresConf会议序列的寰球正式会议,同时也是中国区规模最大、规格最高的PG生态会议,自2017年起,已间断举办三届。往年的大会将持续立足于国内PG行业,为观众提供最清晰、最独特的视角。 特地鸣谢大会赞助商 直播平台合作方 报名入口:https://www.modb.pro/event/220 更多精彩内容,请关注以下平台、网站: 中国PostgreSQL分会官网公众号(技术文章、技术流动):开源软件联盟PostgreSQL分会 中国PostgreSQL分会技术问答社区:www.pgfans.cn 中国PostgreSQL分会官方网站:www.postgresqlchina.com

November 9, 2020 · 1 min · jiezi

关于postgresql:嘉宾介绍2020-PostgreSQL亚洲大会中文分论坛潘娟

作为寰球最大、最出名的PG序列会议,从纽约到莫斯科,从里约热内卢到约翰内斯堡,寰球各地区都有PGConf在运行。而亚洲规格最高的PG技术盛会—PGConf.Asia大会,将于往年11月首度在中国举办。中国开源软件联盟PG分会作为东道主承办本次会议,采纳线上模式,通过墨天轮社区面向寰球直播。本次大会将集中国PG力量和亚洲次要PG贡献者、利用企业独特打造亚洲范畴内最大规模的PG生态会议。 本届PGConf.Asia大会将与PostgresConf.CN中国大会联结举办。PostgresConf.CN中国大会同样是列入PostgresConf会议序列的寰球正式会议,同时也是中国区规模最大、规格最高的PG生态会议,自2017年起,已间断举办三届。往年的大会将持续立足于国内PG行业,为观众提供最清晰、最独特的视角。 嘉宾介绍潘娟,京东数科高级DBA,Apache ALC Beijing member,ApacheShardingSphere PMC. 次要负责京东数科分布式数据库开发、数据库运维自动化平台开发等工作。曾负责京东数科数据库自动化平台设计与开发,现专一于Apache ShardingSphere分布式数据库中间件生态的架构及研发。次要在分布式数据库、开源、分布式架构等相干畛域进行摸索。屡次受邀加入数据库&架构畛域的相干会议并进行分享交换。 分享主题《构建PostgreSQL的分布式数据库中间件生态体系》11月19日09:00-09:40-中文分论坛频道 主题详情作为一款弱小的开源关系型数据库,PostgreSQL始终备受关注。面对数据爆炸的互联网时代,分布式数据库及中间件已成为越来越多企业的抉择。 如何在充分利用PostgreSQL弱小个性的根底上,提供欠缺的分布式数据库的能力?如何构建PostgreSQL的分布式数据库中间件生态体系?如何在满足分布式场景需要下,同时兼具分布式事务、可扩展性、数据迁徙、数据库治理、全SQL的能力?本次分享将引入Apache ShardingSphere来具体论述上述场景及其解决方案。 更多精彩内容,请关注以下平台、网站: 中国PostgreSQL分会官网公众号(技术文章、技术流动):开源软件联盟PostgreSQL分会 中国PostgreSQL分会技术问答社区:www.pgfans.cn 中国PostgreSQL分会官方网站:www.postgresqlchina.com

November 7, 2020 · 1 min · jiezi

关于postgresql:嘉宾专访2020-PostgreSQL亚洲大会阿里云数据库专场曾文旌

2020 PostgreSQL亚洲大会组委会特地推出阿里云数据库嘉宾系列线上专访,第四期咱们邀请到了阿里云数据库高级技术专家曾文旌。他将在11月17日阿里云数据库培训专场11:00-11:40时间段带来《Global Temp Table》分享。 曾文旌 | 阿里云数据库高级技术专家Q1:您能简略介绍一下本人吗?您是如何与PostgreSQL社区互动的?曾文旌:大家好,我叫曾文旌,已经在国产数据库公司从事数据库内核研发工作。当初在阿里云是数据库内核研发工程师。在阿里云工作的这几年次要孵化了RDS for PostgreSQL服务,研发自研云原生数据库 PolarDB forPG。以后次要精力集中在PolarDB的性能优化和SQL个性的研发上。PostgreSQL社区是很好的导师,咱们从社区学到了很多的研发上的办法和教训,受益匪浅。同时,咱们也在尝试向社区回馈一些货色。咱们碰到用户需要的个性个别会抉择先查看PostgreSQL社区的相干探讨,学习相干教训。如果问题社区没有修复,咱们修复后,会尝试修复并奉献到社区。如果相干个性在社区todolist里,但没有实现,咱们会先理解该个性在社区的开发进展,征询一些细节,学习相干教训。当咱们开发实现后,可能会抉择奉献给社区。 Q2:您第一次接触PostgreSQL是什么时候?是如何走上产品研发路线的?曾文旌:在我从业初期,就开始接触PostgreSQL了,大概在2008年。PostgreSQL是先进的开源关系数据库,是实践和实际联合的结晶,很多方面值得开发者学习。国内始终都有大量的应用数据库的需要,从业至今始终在做数据库内核的开发工作,一直满足用户的需要。我从一些偏差接口的性能的开发工作起步,再到简单的内核个性开发。随着互联网大潮袭来,阿里踊跃的推动IT基础设施的去IOE化,本人的本事也有了更大的用武之地,于是退出了阿里。随着阿里巴巴实现了本身去IOE,公司决定把技术上的能力以云服务的模式输入给全社会,于是我也在这个时候退出阿里云RDS团队,并实现了对RDS for PostgreSQL的孵化。近几年,云原生数据库崛起,并成为数据库倒退的新趋势,阿里云也推出了本人的云原生数据库 PolarDB ,于是我也投入到 PolarDB for PG的研发中来。 Q3:您有参加PG版本性能的迭代吗?次要有哪些奉献?曾文旌:我本人的工作会有一些和社区进行交互的方面,例如: PostgreSQL刚公布9.4, 反对逻辑流复制时,就给社区提过一些逻辑流复制相干的bug。不间断的,参加了一些bug的修复和一些个性的探讨,包含复原模块和分区表相干。最近一年多,我在PolarDB开发了新个性 Global temp table,从社区学习了很多前人的教训,个性实现开发并上线之后,正在尝试把它奉献给社区,以后曾经有300多个邮件探讨,我还在修复一些细节问题。Q4:您在产品布局或产品研发中遇到困难个别会如何解决?最让您感觉骄傲(乏味)的事是什么?曾文旌:我本人感到比拟骄傲的是,随着交付的个性越来越多,且越来越简单,积攒了十分丰盛的研发教训。因为团队整体严密的分工协作,身处在这个团队中,我集体也取得了较大的成长。大家都晓得互联网公司的开发模式和传统研发型企业差异比拟大。当你残缺的实现一个大个性的需要剖析,设计和实现直到公布上线,再到一直迭代欠缺后,会极大的进步本人的信念,并取得很大的成就感。这会促使你想持续挑下一个更难的个性。 Q5:您团队在PG畛域的外围产品新性能次要解决什么问题,目前成果怎么样?曾文旌:目前我所在团队主力研发的产品 PolarDBfor PG 是一款基于计算存储拆散架构的云原生关系数据库,主打OLTP场景。PolarDB for PG有着良好的存储扩大能力和计算扩大能力(读扩大-一写多读)和高度的Oracle兼容性,这些是该产品的次要特点。高度的Oracle兼容得益于PostgreSQL低劣的基础架构,以及咱们在此基础上研发的大量Oracle兼容性个性,这使得咱们做去O迁徙的施行老本绝对较低,迁徙周期和危险也比拟可控。目前,在公共云上曾经商业化1年多,帮忙数百个客户(包含电商,新批发等行业)实现了数据库的去O和上云工作。以后,咱们的产品主攻电信、金融和保险等行业,在国产化大潮下,帮忙更多的客户实现IT服务国产化。 Q6:您认为数据库产品将来如何倒退才会更有生命力?曾文旌:我的了解,将来必然是满足最多用户需要的产品级数据库,会有很强的生命力。另一方面也是非常重要的,产品若要大规模利用,就须要围绕产品建设一个残缺的生态。 Q7:近期对建设产品生态有什么打算吗?曾文旌:这几年,阿里云也在重点打造云服务的生态。以后,国内IT服务,包含数据库面临大量国产化的需要,须要大量生态搭档一起实现。这部分也存在微小的商机。 Q8:最初,您对想从事PG产品或技术研发的网友们有什么倡议吗?曾文旌:PostgreSQL是优良的开源关系数据库,无论国内还是国内,都有很多公司站在PostgreSQL的肩膀上研发出了更优良的产品,实现了微小的商业价值。同时PostgreSQL自身的生命力也越来越弱小。数据库的研发工作是值得挑战并很有前途的,适宜作为长期的事业。将来必然有大量的需要(尤其国产化背景),这须要大量的研发人才,心愿有更多的同学参一起参加到其中来。 2020 PostgreSQL亚洲大会阿里云数据库专场2020年11月17日,从早到晚,八位原厂讲师,八场干货分享,全中文在线直播,尽在PostgresConf.CN & PGConf.Asia 2020大会阿里云数据库专场频道,期待你的退出! 对于阿里云数据库阿里云智能数据库产品事业部承载着阿里云、阿里巴巴团体所有在线数据以及数据服务,提供从在线事务处理到在线剖析解决的全栈数据库产品和服务,反对私有云、专有云各种环境下的灵便部署,集体开发者、中小企业到寰球大规模企业业务全笼罩。无论是集体还是最为严苛的企业业务需要,阿里云数据库服务都是最为牢靠、高效的抉择。随着数据时代的到来,阿里云数据库产品基于云计算和数据中心的架构从新进行设计实现,在数据库存储引擎、云原生技术、剖析引擎、分布式解决、FPGA/GPU硬件加速、智能数据库、智能化管控平台、平安数据库等方面都处于寰球当先地位,全面的云产品和服务组合,为阿里云客户以及阿里巴巴团体多元化业务提供了丰盛的数据库产品解决方案和行业教训。 目前通过十余年的利用实际以及技术迭代,阿里云领有国内最弱小和丰盛的云数据库产品家族,涵盖关系型数据库、非关系型数据库、剖析型数据库、数据库生态工具以及云数据库专属集群5大板块,满足用户不同的数据库利用开发需要,并且解决企业外围业务上云的要害难题。 外围产品外围产品包含:自研云原生关系型数据库PolarDB、云原生数据仓库AnalyticDB和云原生数据湖剖析DLA、云原生多模数据库Lindorm、云数据库专属集群MyBase以及关系型数据库服务RDS,非关系型数据库服务NoSQL产品HBase、Redis、MongoDB、GraphDB,数据库生态工具DTS/DMS/DBS/ADAM,智能化运维平台DAS等。其中,PolarDB是国内首个云原生关系型数据库,采纳存储计算拆散、软硬一体化设计,满足大规模利用场景需要。 PostgreSQL阿里云数据库专场-钉钉交换群 对于PostgresConf.CN&PGConf.Asia2020大会作为寰球最大、最出名的PG序列会议,从纽约到莫斯科,从里约热内卢到约翰内斯堡,寰球各地区都有PGConf在运行。而亚洲规格最高的PG技术盛会—PGConf.Asia大会,将于往年11月首度在中国举办。中国开源软件联盟PG分会作为东道主承办本次会议,采纳线上模式,通过墨天轮社区面向寰球直播。本次大会将集中国PG力量和亚洲次要PG贡献者、利用企业独特打造亚洲范畴内最大规模的PG生态会议。 本届PGConf.Asia大会将与PostgresConf.CN中国大会联结举办。PostgresConf.CN中国大会同样是列入PostgresConf会议序列的寰球正式会议,同时也是中国区规模最大、规格最高的PG生态会议,自2017年起,已间断举办三届。往年的大会将持续立足于国内PG行业,为观众提供最清晰、最独特的视角。 特地鸣谢大会赞助商 直播平台合作方 报名入口:https://www.modb.pro/event/220 更多精彩内容,请关注以下平台、网站: 中国PostgreSQL分会官网公众号(技术文章、技术流动):开源软件联盟PostgreSQL分会 中国PostgreSQL分会技术问答社区:www.pgfans.cn 中国PostgreSQL分会官方网站:www.postgresqlchina.com

November 5, 2020 · 1 min · jiezi

关于postgresql:嘉宾专访2020-PostgreSQL亚洲大会阿里云数据库专场樊智辉

2020 PostgreSQL亚洲大会组委会特地推出阿里云数据库嘉宾系列线上专访,第三期咱们邀请到了阿里云数据库技术专家樊智辉。他将在11月17日阿里云数据库培训专场10:20-11:00时间段带来《UnqiueKey:查问重写加强让你的SQL跑的更快 》分享。 樊智辉 | 阿里云数据库技术专家 Q1:您能简略介绍一下本人吗?您是如何与PostgreSQL社区互动的?樊智辉:大家好,我是樊智辉,在2007年开始接触Oracle数据库,2010年之前曾经熟读了Oracle 大部分文档并做了大量测试。但真正接触PostgreSQL却是在2019年,相比Oracle, PostgreSQL 最大2个不同是 PostgreSQL 是开源的,并且领有一个很敌对的社区。 参加社区探讨也是一件很有挑战的事件,对于沟通技巧、心态等等都是一系列的考验,最初即使你把本人能做的全副做好了(包含良好的代码、文档、patch 拆分、沟通用语等等),很多时候还要进行漫长的期待,因为社区的资源切实是太紧缺了。 Q2:您第一次接触PostgreSQL是什么时候?是如何走上产品研发路线的?樊智辉:我在接触PostgresSQL之前,曾经有10年多的Oracle 教训。退出PostgreSQL研发组是一个被动抉择的过程,第一个月刚好遇到了一家大型物联网企业的攻坚战,在这个攻坚战中发现了PostgreSQL在优化器层面的一些改善空间,这个和我过来的教训也比拟匹配,而后就坚韧不拔地走这条路了。 Q3:您有参加PG版本性能的迭代吗?次要有哪些奉献?樊智辉:我会参加开源社区的迭代。目前本人的Patch 有Unique Key 的辨认和利用,该Patch处于Review 的状态中,仍然在开发的包含 Append 节点对RunTime Partition Prune 的感知。除了提交patch 以外,还有Review 他人的patch和大量的探讨。 Q4:您在产品布局或产品研发中遇到困难个别会如何解决?最让您感觉骄傲(乏味)的事是什么?樊智辉:通常会自我激励,比方我会和本人对话,“Hi Andy, Can you make a clear understanding about X in 8 hours? Ofcourse, let’s see!”. 通常状况最终都能获得不错的后果。这种对话的关键点在于对问题的清晰形容,前面还会有很多问题的进一步形容,再加上一个工夫限度,精神状态会十分好。当然,这么好的状态也是每天都有的。 2020 PostgreSQL亚洲大会阿里云数据库专场2020年11月17日,从早到晚,八位原厂讲师,八场干货分享,全中文在线直播,尽在PostgresConf.CN & PGConf.Asia 2020大会阿里云数据库专场频道,期待你的退出! 对于阿里云数据库阿里云智能数据库产品事业部承载着阿里云、阿里巴巴团体所有在线数据以及数据服务,提供从在线事务处理到在线剖析解决的全栈数据库产品和服务,反对私有云、专有云各种环境下的灵便部署,集体开发者、中小企业到寰球大规模企业业务全笼罩。无论是集体还是最为严苛的企业业务需要,阿里云数据库服务都是最为牢靠、高效的抉择。随着数据时代的到来,阿里云数据库产品基于云计算和数据中心的架构从新进行设计实现,在数据库存储引擎、云原生技术、剖析引擎、分布式解决、FPGA/GPU硬件加速、智能数据库、智能化管控平台、平安数据库等方面都处于寰球当先地位,全面的云产品和服务组合,为阿里云客户以及阿里巴巴团体多元化业务提供了丰盛的数据库产品解决方案和行业教训。 目前通过十余年的利用实际以及技术迭代,阿里云领有国内最弱小和丰盛的云数据库产品家族,涵盖关系型数据库、非关系型数据库、剖析型数据库、数据库生态工具以及云数据库专属集群5大板块,满足用户不同的数据库利用开发需要,并且解决企业外围业务上云的要害难题。 外围产品外围产品包含:自研云原生关系型数据库PolarDB、云原生数据仓库AnalyticDB和云原生数据湖剖析DLA、云原生多模数据库Lindorm、云数据库专属集群MyBase以及关系型数据库服务RDS,非关系型数据库服务NoSQL产品HBase、Redis、MongoDB、GraphDB,数据库生态工具DTS/DMS/DBS/ADAM,智能化运维平台DAS等。 其中,PolarDB是国内首个云原生关系型数据库,采纳存储计算拆散、软硬一体化设计,满足大规模利用场景需要。 PostgreSQL阿里云数据库专场-钉钉交换群 对于PostgresConf.CN&PGConf.Asia2020大会作为寰球最大、最出名的PG序列会议,从纽约到莫斯科,从里约热内卢到约翰内斯堡,寰球各地区都有PGConf在运行。而亚洲规格最高的PG技术盛会—PGConf.Asia大会,将于往年11月首度在中国举办。中国开源软件联盟PG分会作为东道主承办本次会议,采纳线上模式,通过墨天轮社区面向寰球直播。本次大会将集中国PG力量和亚洲次要PG贡献者、利用企业独特打造亚洲范畴内最大规模的PG生态会议。 本届PGConf.Asia大会将与PostgresConf.CN中国大会联结举办。PostgresConf.CN中国大会同样是列入PostgresConf会议序列的寰球正式会议,同时也是中国区规模最大、规格最高的PG生态会议,自2017年起,已间断举办三届。往年的大会将持续立足于国内PG行业,为观众提供最清晰、最独特的视角。 特地鸣谢大会赞助商 直播平台合作方 报名入口:https://www.modb.pro/event/220 更多精彩内容,请关注以下平台、网站: 中国PostgreSQL分会官网公众号(技术文章、技术流动):开源软件联盟PostgreSQL分会 中国PostgreSQL分会技术问答社区:www.pgfans.cn 中国PostgreSQL分会官方网站:www.postgresqlchina.com

November 5, 2020 · 1 min · jiezi

关于postgresql:嘉宾专访2020-PostgreSQL亚洲大会阿里云数据库专场周祥

2020 PostgreSQL亚洲大会组委会特地推出阿里云数据库嘉宾系列线上专访,第二期咱们邀请到了阿里云数据库高级产品专家周祥。他将在11月17日阿里云数据库培训专场09:40-10:20时间段带来《阿里云PostgreSQL生态云原生数据库产品 》英文分享。 周祥,阿里云高级产品专家。2008年硕士毕业,退出IBM中国研发核心DB2 for z/OS研发团队,从事DB2 for z/OS的数据库引擎相干研发工作;2012年开始从事IBM大数据产品BigInsights的研发工作。2013年底退出阿里巴巴,是阿里云OLAP产品剖析型数据库AnalyticDB和Data Lake Analytics的外围研发成员之一。目前是阿里云数据库团队国内产品经理,负责数据库所有产品面向国内市场的策略和Go To Market相干工作。到目前为止,领有和申请公开的技术发明专利超过30项,次要波及关系型数据库、大数据、分布式计算、云计算等畛域。 周祥 | 阿里云数据库高级产品专家 Q1:您第一次接触PostgreSQL是什么时候?是如何走上产品研发路线的?周祥:大家好,我是周祥,阿里云数据库高级产品专家。我第一次接触PostgreSQL是在学生时代,应该是在大学本科毕业设计时,一个电信零碎面向SOA架构的设计课题,课题施行中须要开源数据库来存储根底的业务数据,过后在MySQL和PostgreSQL中做了比拟和抉择,起因比较简单,是伯克利写的倒退过去的,代码很优良,就抉择了PostgreSQL。研究生实习期间,是在IBM DB2 for z/OS的中国研发团队实习,毕业后就退出了这个部门,开始从一些数据库优化工具做起,参加到DB2的产品内核开发中。 Q2:您在产品布局或产品研发中遇到困难个别会如何解决?最让您感觉骄傲(乏味)的事是什么?周祥:当我工作一段时间在一个畛域中有肯定的积攒后,遇到困难首先还是要独立思考,有架构设计的问题,有代码bug的问题等。独立思考、剖析后,还须要与我的项目和团队成员充沛探讨。波及架构设计的问题,充沛探讨显得尤其重要,汇合众人的智慧防止一些架构上的缺点和潜在的坑;波及到一些比拟难的代码bug问题,我的教训是须要更独立、深刻debug root cause。 最让我感觉乏味的事,是在4年前的一个十分重大项目中,邻近业务上线前1周,因为新的业务查问和负载的上线,咱们数据库系统模块开始频繁core dump。在业务压力很大的状况下,我拉上了团体在JVM(咱们这个数据库系统是Java实现)畛域的专家一起剖析,定位出unsafe API操作相干导致的地址overlap问题,然而具体是什么起因、哪一块代码导致的地址overlap?这个问题纠结了2天工夫,最终在零碎代码中把所有Java相干unsafe操作的代码拉进去剖析,才发现是历史上咱们在Java 6时代,对一个开源Java 8 beta版本中Stream个性的代码的提前复制应用无关,不同的变量长度导致地址overlap,发现这个问题曾经是业务上线deadline的前2天了。批改完了胆战心惊,在业务上线前的最初一天上线测试,发现问题并解决。过后的压力场景和解决完问题后的感觉当初想想是很乏味的事件。 Q3:您认为数据库产品将来如何倒退才会更有生命力?周祥:数据库曾经是业务零碎的不可短少的基础设施,云时代尤其如此。数据库系统自身相对来说,是非常复杂的技术实现和产品,然而它的作用和定位又是简略清晰的。集体认为数据库将来在云上是要充分利用云的能力,做得和水、电一样易用,水和电的应用简直没有门槛。然而如果只看数据库,其实上手和入门门槛挺高的,而更多地被集成、与业务利用地买通,可能让数据库更加宽泛地应用。同时,与业务、利用高效协同,也能够让数据库的推广和利用更加迅速和顺畅。 Q4:您对产品生态倒退有什么见解?近期对建设产品生态有什么打算吗?周祥:数据库产品还是保持被集成的路线,对下层业务、应用软件的集成、兼容做到足够好,比方ERP、CRM等企业级软件的互认证;对数据库生态工具的集成、兼容;对迁徙、备份复原、ETL、BI软件等的互认证。这些根底的被集成工作做好,才意味着更大市场利用空间和更低的应用门槛。咱们也会在这条路上动摇地走上来。 2020 PostgreSQL亚洲大会阿里云数据库专场2020年11月17日,从早到晚,八位原厂讲师,八场干货分享,全中文在线直播,尽在PostgresConf.CN & PGConf.Asia 2020大会阿里云数据库专场频道,期待你的退出! 对于阿里云数据库阿里云智能数据库产品事业部承载着阿里云、阿里巴巴团体所有在线数据以及数据服务,提供从在线事务处理到在线剖析解决的全栈数据库产品和服务,反对私有云、专有云各种环境下的灵便部署,集体开发者、中小企业到寰球大规模企业业务全笼罩。无论是集体还是最为严苛的企业业务需要,阿里云数据库服务都是最为牢靠、高效的抉择。随着数据时代的到来,阿里云数据库产品基于云计算和数据中心的架构从新进行设计实现,在数据库存储引擎、云原生技术、剖析引擎、分布式解决、FPGA/GPU硬件加速、智能数据库、智能化管控平台、平安数据库等方面都处于寰球当先地位,全面的云产品和服务组合,为阿里云客户以及阿里巴巴团体多元化业务提供了丰盛的数据库产品解决方案和行业教训。 目前通过十余年的利用实际以及技术迭代,阿里云领有国内最弱小和丰盛的云数据库产品家族,涵盖关系型数据库、非关系型数据库、剖析型数据库、数据库生态工具以及云数据库专属集群5大板块,满足用户不同的数据库利用开发需要,并且解决企业外围业务上云的要害难题。 外围产品外围产品包含:自研云原生关系型数据库PolarDB、云原生数据仓库AnalyticDB和云原生数据湖剖析DLA、云原生多模数据库Lindorm、云数据库专属集群MyBase以及关系型数据库服务RDS,非关系型数据库服务NoSQL产品HBase、Redis、MongoDB、GraphDB,数据库生态工具DTS/DMS/DBS/ADAM,智能化运维平台DAS等。 其中,PolarDB是国内首个云原生关系型数据库,采纳存储计算拆散、软硬一体化设计,满足大规模利用场景需要。 PostgreSQL阿里云数据库专场-钉钉交换群 对于PostgresConf.CN&PGConf.Asia2020大会作为寰球最大、最出名的PG序列会议,从纽约到莫斯科,从里约热内卢到约翰内斯堡,寰球各地区都有PGConf在运行。而亚洲规格最高的PG技术盛会—PGConf.Asia大会,将于往年11月首度在中国举办。中国开源软件联盟PG分会作为东道主承办本次会议,采纳线上模式,通过墨天轮社区面向寰球直播。本次大会将集中国PG力量和亚洲次要PG贡献者、利用企业独特打造亚洲范畴内最大规模的PG生态会议。 本届PGConf.Asia大会将与PostgresConf.CN中国大会联结举办。PostgresConf.CN中国大会同样是列入PostgresConf会议序列的寰球正式会议,同时也是中国区规模最大、规格最高的PG生态会议,自2017年起,已间断举办三届。往年的大会将持续立足于国内PG行业,为观众提供最清晰、最独特的视角。 特地鸣谢大会赞助商 直播平台合作方 报名入口:https://www.modb.pro/event/220 更多精彩内容,请关注以下平台、网站: 中国PostgreSQL分会官网公众号(技术文章、技术流动):开源软件联盟PostgreSQL分会 中国PostgreSQL分会技术问答社区:www.pgfans.cn 中国PostgreSQL分会官方网站:www.postgresqlchina.com

November 4, 2020 · 1 min · jiezi

关于postgresql:报名2020-PostgreSQL亚洲大会系列专场一培训机构公益专场

由中国开源软件联盟PostgreSQL分会打造的“中国PostgreSQL培训和技术能力认证体系”于2019年正式公布,并失去工信部中国电子工业标准化技术协会权威背书。通过科学化评定职业技能与价值化经营策略,历时一年精心培养。截止2020年10月份,共有CUUG优技、恩墨学院、晟数学院、盘古云课堂、中软培训、西方瑞通、柯普瑞学院、博森瑞学院、博学教育、云贝学院、广州腾科、安徽肯耐博共计12家受权培训机构。 PostgreSQL培训机构公益专场自征集以来,失去培训机构的踊跃参加,踊跃奉献讲师和教学力量。心愿借本届大会的契机,以公益分享、收费培训为目标回馈PostgreSQL社群和每一位酷爱pg、关注pg、使用pg谋生的PGer!为大家带来一场属于PostgreSQL技术的饕餮盛宴。 2020年11月17日,从早到晚,十位业余讲师,十场干货分享,全中文在线直播,尽在PostgresConf.CN&PGConf.Asia 2020大会培训机构公益专场频道,期待你的退出! 大会其余系列专场报道详情,请关注官网公众号:开源软件联盟PostgreSQL分会 PostgreSQL培训机构公益专场微信交换群会后将在群内共享嘉宾演讲视频,若二维码过期请增加工作人员微信(15863186550)入群,验证信息请填写“PG培训机构专场微信群” 对于PostgresConf.CN&PGConf.Asia2020大会作为寰球最大、最出名的PG序列会议,从纽约到莫斯科,从里约热内卢到约翰内斯堡,寰球各地区都有PGConf在运行。而亚洲规格最高的PG技术盛会—PGConf.Asia大会,将于往年11月首度在中国举办。中国开源软件联盟PG分会作为东道主承办本次会议,采纳线上模式,通过墨天轮社区面向寰球直播。本次大会将集中国PG力量和亚洲次要PG贡献者、利用企业独特打造亚洲范畴内最大规模的PG生态会议。 本届PGConf.Asia大会将与PostgresConf.CN中国大会联结举办。PostgresConf.CN中国大会同样是列入PostgresConf会议序列的寰球正式会议,同时也是中国区规模最大、规格最高的PG生态会议,自2017年起,已间断举办三届。往年的大会将持续立足于国内PG行业,为观众提供最清晰、最独特的视角。 特地鸣谢大会赞助商 直播平台合作方 报名入口:https://www.modb.pro/event/220 更多精彩内容,请关注以下平台、网站: 中国Postgre SQL分会官网公众号(技术文章、技术流动):开源软件联盟PostgreSQL分会 中国Postgre SQL分会技术问答社区:www.pgfans.cn 中国Postgre SQL分会官方网站:www.postgresqlchina.com

November 2, 2020 · 1 min · jiezi

关于postgresql:权益满满-PGConfAsia2020大会诚邀赞助商携手走向更大世界

对于PostgresConf.CN&PGConf.Asia2020大会作为寰球最大、最出名的PG序列会议,从纽约到莫斯科,从里约热内卢到约翰内斯堡,寰球各地区都有PGConf在运行。而亚洲规格最高的PG技术盛会—PGConf.Asia大会,将于往年11月首度在中国举办。中国开源软件联盟PG分会作为东道主承办本次会议,采纳”线上线下联合“的模式,通过墨天轮社区面向寰球直播。本次大会将集中国PG力量和亚洲次要PG贡献者、利用企业独特打造亚洲范畴内最大规模的PG生态会议。本届PGConf.Asia大会将与PostgresConf.CN中国大会联结举办。PostgresConf.CN中国大会同样是列入PostgresConf会议序列的寰球正式会议,同时也是中国区规模最大、规格最高的PG生态会议,自2017年起,已间断举办三届。往年的大会将持续立足于国内PG行业,为观众提供最清晰、最独特的视角。 更多精彩内容,请关注以下平台、网站: 中国Postgre SQL分会官网公众号(技术文章、技术流动):开源软件联盟PostgreSQL分会 中国Postgre SQL分会技术问答社区:www.pgfans.cn 中国Postgre SQL分会官方网站:www.postgresqlchina.com

October 31, 2020 · 1 min · jiezi

关于postgresql:邀请函-PostgresConfcn-2020开发者闭门会议广邀中国贡献者

咱们在PGConf.Asia2020上有一个开发者闭门会议! 这是PostgreSQL国内社区技术大会的常规。因而,咱们筹备了一些无关什么是闭门会议及其如何参加的信息。闭门会议将于11月17日(星期三)线上举办,这是在此次PGCONF的次要会议日之前的一天,咱们心愿您能有趣味参加其中! 发展开发者闭门会议是PostgreSQL国内社区技术大会的常规,PGConf.Asia2020的闭门会议11月17日(星期三)线上举办。 这次会议失去了国内PG社区的大力支持,PG外围组成员Bruce Momjian将主持此次中国PG社区的第一次开发者闭门会议,同时来自Crunchy Data的CTO Stephen Frost将和Bruce一起主持此次闭门会议。 闭门会议是由参与者驱动的会议,所有的与会者都能够提出技术性话题,任何想就某个PG技术话题进行探讨的人都能够争取到发言工夫。 闭门会议使咱们有更多工夫探讨每一项PG开发工作的细节,包含: 会议征稿后呈现的新话题。未受邀加入会议的PG贡献者的参加PG相干研发工作或Hackers探讨现开启闭门会议报名通道,广邀中国贡献者参加。闭门会议的大部分工夫打算为当天的上午9:00-11:00点,如果您想要参加闭门会议,请与我分割(weibo@postgresqlchina.com),如果您有想要探讨的议题能够同时提出。 附一:主持人简介 布鲁斯·摩健(Bruce Momjian)-副总裁Bruce Momjian是PostgreSQL寰球开发小组的联结创始人和外围团队成员,并作为演讲嘉宾加入过诸多国内开源会议。他也是Addison-Wesley出版的《PostgreSQL的简介和概念》一书的作者。Bruce Momjian从2006年开始受聘于EnterpriseDB,目前负责EnterpriseDB副总裁一职。 斯蒂芬·弗罗斯特(Stephen Frost)-副总裁Stephen Frost是Crunchy Data Solutions,Inc的首席技术官,也是PostgreSQL的发布者和次要贡献者。他以前的工作包含在8.1中实现角色零碎(替换以前的用户/组零碎),在8.4中实现列级特权以及对PL / pgSQL的改良。 附二:流程概要 筹备主题:参与者提前准备提报PG技术主题,主题相干的PG性能概要,开发思路;提报主题:技术主题能够现场提报,也能够提报给咱们PostgreSQL分会,由分会汇总后果提报给会议主持人(包含不限于主题概要,开发思路);主题陈说:提报主题的开发者针对新性能要点进行表述,包含不限于性能需要、开发思路;主题投票:每个开发者主题陈说实现后,有整体与会者发动投票,主持人记录投票后果;主题探讨:主持人依据投票后果选出可具体探讨的主题(如果题目较多可分组讨论),与会者依据本人感兴趣的主题进入小组讨论,小组讨论的主持人记录探讨过程及后果造成会议纪要;后果通告:小组主持人将会议纪要提交到社区wiki上并发送邮件给整体与会者;合作开发:一旦主题纳入开发计划,主题发起者能够协同外围开发人员实现性能。更多精彩内容,请关注以下平台、网站: 中国Postgre SQL分会官网公众号(技术文章、技术流动):开源软件联盟PostgreSQL分会 中国Postgre SQL分会技术问答社区:www.pgfans.cn 中国Postgre SQL分会官方网站:www.postgresqlchina.com

October 31, 2020 · 1 min · jiezi

关于postgresql:重要通知三方共建中国PostgreSQL认证权威升级

附:中国电子工业标准化协会(简称“中电标协”)于1993年成立,是经民政部社团治理机关批准的国家协会,取得民政部签发的国家一级协会注销资质,并颁发政府备案的社会个人登记证和社团代码。协会由全国电子信息产业标准化组织、各无关部门、各地区企事业单位,各级标准化管理机构组成,受工信部电子技术标准化研究院、民政部社会组织管理局的业务领导和监督管理。协会下设信息技术利用翻新工作委员会、教育培训工作委员会、信息技术服务分会,国家信息技术服务规范工作组等工作机构。 工信部电子技术标准化研究院以电子信息技术标准化工作为外围,通过发展规范制订、检测、计量、认证、信息服务等业务,面向政府提供政策钻研、行业治理和战略决策的业余撑持,面向社会提供标准化技术服务。电子规范院承当55个IEC、ISO/IEC JTC1的TC/SC国内技术归口和17个全国标准化技术委员会秘书处工作,与多个国际标准化组织及国外驰名机构建设了单干关系,为规范的利用推广、产业推动和国际交流单干施展了重要的促进作用。 更多精彩内容,请关注以下平台、网站: 中国Postgre SQL分会官网公众号(技术文章、技术流动):开源软件联盟PostgreSQL分会 中国Postgre SQL分会技术问答社区:www.pgfans.cn 中国Postgre SQL分会官方网站:www.postgresqlchina.com

October 30, 2020 · 1 min · jiezi

关于postgresql:中国PostgreSQL培训认证官方授权机构列表

更多精彩内容,请关注以下平台、网站: 中国Postgre SQL分会官网公众号(技术文章、技术流动):开源软件联盟PostgreSQL分会 中国Postgre SQL分会技术问答社区:www.pgfans.cn 中国Postgre SQL分会官方网站:www.postgresqlchina.com

October 29, 2020 · 1 min · jiezi

关于postgresql:直播回顾日本工程师Amit-Langote畅谈Postgres中的表分区

表分区是一组用来解决大型数据的技术,以及治理数据的不便选项。总而言之,将大表划分为更易于治理的多个小表,称之为分区。 北京工夫6月27日,PostgreSQL国内社区开发者、EDB日本公司工程师Amit Langote受中国PostgreSQL分会邀请前来加入“Postgres.Live云端技术沙龙第二期”主题流动,与中国PostgreSQL爱好者,关注者以及从业者畅聊Postgres中的表分区。 NO.1技术分享在演讲环节,Amit Langote向大家分享了什么是分区;Postgres中的分区介绍,包含之前的分区、申明式分区、语法、索引、束缚、触发器、复制和优化;分区的最佳实际和陷阱三方面的内容,内容长篇累牍、颇有趣味。 其中Amit Langote提到,PostgreSQL v10后的分区表上容许应用语句级(Statement-level)触发器;PostgreSQL v11后容许分区表上的行级AFTER触发器;在行将公布的PostgreSQL v13将容许对分区表执行行级BEFORE触发器。 另外,直到PostgreSQL v12为止,复制只能解决未分区的表。也就是说,分区表无奈增加到PUBLICATION中,而SUBSCRIPTION更无奈将其接管到分区表中。而在行将公布的PostgreSQL v13中则能够复制分区表。 NO.2答疑互动之后的答疑互动环节,依据聊天栏内大家现场提出的问题,Bruce Momjian乐此不疲、一一做出解答。 以下是小编对于问题和答案的整顿: 问:数据表多大适宜表分区,分区键应该如何抉择?答:通常是达到1TB,但有的人达到4TB才变成分区表,也有的人100GB就变成分区表,这齐全取决于你的利用场景。分区键如何抉择,在我方才的演讲中有具体说到,供你参考。 问:PostgreSQL反对最大的分区数量是多少?答:PostgreSQL并没有限度你创立多少个分区,然而我倡议不要创立一千个以上,因为对你其余方面的性能会有所影响。 问:什么业务场景适宜表分区?麻烦以你的工作内容举个例子。答:我理论工作中没有遇到表分区的利用场景,我的工作就是写代码、写PostgreSQL的性能。但我理解到很多企业用工夫相干的数据来做表分区,这个蛮常见的。 问:当你有一个很大的表,想把它变成分区表,该怎么做呢?答:我方才的演讲也讲到了,有很多种做法,具体由你的利用场景来决定,我当初也没有一个很好的指标性答案来答复这个问题。 问:有没有工具能够测试下分区表的性能,比方在理论产品部署之前,能够用其简略做个性能测试?答:官网PostgreSQL目前没有工具能够测试分区表来看它的性能体现,然而有另外一个工具叫HypoPG,它能够创立一些虚伪的数据来做测试,然而目前它不反对最新版本的PG。HypoPG地址:https://hypopg.readthedocs.io... 问:在高可用方面用Nginx或Haproxy环境下分区是怎么实现的?答:我在这方面没有很多倡议,我次要做内核方面的工作,我晓得能够用FDW来实现分片,跟分区表一起实现高可用的利用场景。 问:当我的分区键被更改的时候,我的数据就不属于那个分区了,那PG会怎么解决这个事件?答:在之前的PG版本里,会间接报错。在最近的12、13版本里,会主动帮你做一个分区键的迁徙。 问:PG的hash分区,会有数据分布均衡的考量么?用户须要本人来实现吗?答:PG所应用的默认Hash算法,实践是能够统一分配数据的。如果你对默认的HASH算法不称心,有一个选项能够应用定制的“hash-operater”类。PostgreSQL分区反对用户制订用什么样的办法(Operator)来进行数据分布,不论是Range、List还是Hash。 问:有没有工具能够主动创立分区表?除了shell脚本,还有其余办法吗?答:有的,你能够参考一个叫“pg_partman”的工具。它能够创立分区和治理分区,让你的操作变得简略。 问:PostgreSQL将来对分布式的反对,会以当初分区表的根底上来进行实现和设计么?比方分区表+fdw。答:当初你就能够用FDW插件和分区的性能创立实现相似的设置,然而你不要指望所有的局部都工作,比方你没有分布式原子事务、散布的snapshot等。你能够实现一个只读的分区跨集群数仓,可能会好一点。 问:primary key的限度怎么加到分区表外面?答:你能够把“primary key”放到分区表里,须要留神的是“primary key”的值和分区键必须要统一。 问:PG的分区实现形式和Oracle的分区实现有什么不同?各自的优缺点是什么?答:我对Oracle的理解不多, Oracle在分区畛域曾经做的很久了,对用户的体验也会好一些。如果你之前用Oracle的分区很久,对于PG的分区你可能一开始会不太习惯。然而基本功能两者都是差不多的。 问:分区表是否反对在线scale out,如果是,能简略说一下如何实现的么,保障在线业务不受到影响。答:你能够用FDW模块和表分区来做扩大性能,倡议做只读的FDW扩大。 问:分区键必须创立惟一主键索引吗?分区间的索引能够不同吗?答:你能够把每个分区的分区键也把它创立为“primary key”,然而我感觉没有太大的意义,通常咱们的做法是把“primary key”创立在副分区上,这样每一个子分区都能够达到它的成果。创立“primary key”,你要确定它与你的分区键是统一的。 问:PG11新算法中分区修剪的根据是什么?答:其实没有太简单的逻辑,简略来说,就是不去扫描不须要扫描的分区。 以上是小编收集的现场问题和答复。最初,由衷的感激Amit Langote应邀参加来自中国PostgreSQL分会主办的“Postgres.Live云端技术沙龙第二期”主题流动,其次感激志愿者Cary Huang和David Zhang精确的中英文实时翻译,最初感激来自各界PostgreSQL爱好者和关注者的加入以及PostgreSQL从业者的反对。 流动回放视频地址:https://www.bilibili.com/vide...流动PPT获取形式:关注中国PostgreSQL分会官网微信公众号并回复“分区” 更多精彩内容,请关注以下平台、网站: 中国Postgre SQL分会官网公众号(技术文章、技术流动):开源软件联盟PostgreSQL分会 中国Postgre SQL分会技术问答社区:www.pgfans.cn 中国Postgre SQL分会官方网站:www.postgresqlchina.com

October 26, 2020 · 1 min · jiezi

关于postgresql:直播回顾-EDB总裁Bruce-Momjian道出原生分布式将在PG-14版本发布

北京工夫5月16日上午,美东工夫5月15日晚,PostgreSQL国内社区联结创始人、EDB副总裁Bruce Momjian做客中国PostgreSQL分会《PostgreSQL大咖面对面》流动现场,在Cary Huang和David Zhang两位志愿者的同声传译帮忙下,与近百位PostgreSQL从业者、爱好者一起探讨将来的PostgreSQL分片。 NO.1技术分享在演讲环节,Bruce Momjian向大家分享了什么是数据库扩大;为什么要扩大;垂直扩大的选项和形式;非分片程度扩大的选项和形式;应用分片的意义;现有的分片选项;将来的分片需要;并行数据分片拜访等内容,内容丰盛精彩极具养分。 NO.2答疑互动之后的答疑互动环节,依据聊天栏内大家现场提出的问题,Bruce Momjian乐此不疲、一一做出解答。Bruce Momjian走漏PostgreSQL 13版本将在几周后公布,但没有增加很多的分片治理性能。他示意“分片的业务场景需要不多是导致社区开发较慢的起因,但不会让大家期待太久,因为原生分布式性能将作为PostgreSQL 14的重磅公布。” Bruce Momjian十分认可中国企业对国内社区sharding方面的奉献,如highgo曾经为社区提交了诸多对于sharding的补丁,包含FDW的并行内部扫描、基于全局CSN的快照以及SI集成等性能。也心愿PostgreSQL 14能包含更多来自中国的奉献。 因现场发问较多,Bruce Momjian的解答在此不做展示。 现场问题汇总: PG原生集群哪个版本能推出?元数据存在哪里?如果存在协调员上,如何应答协调员宕机无奈同步的问题?是否能够思考将元数据放在独自的一个raft复制组上?通过FDW实现的分片与Citus各自的劣势?如果PostgreSQL社区想要实现分片,有没有与PostgreSQL xl不同的次要设计?xid64社区很早就提交了补丁,zheap引擎也很早提交了,mvcc老大难的问题什么时候能力解决掉?目前有些场景,全局序列的性能在分布式中性能会大打折扣,请问PG后续打算在这方面有哪些优化伎俩吗?GTM会不会成为瓶颈,这个怎么解决;分片数批改的话,是不是要从新导数据,能够不必导数据吗,因为分片保护相比非分片维护性较简单,对保护分片会有配套的比拟好的保护工具吗?对于没有唯一性束缚的散布键,hash算法并不能解决数据歪斜问题,目前pg有哪些散布算法?以及如何躲避分片数据歪斜问题?当初新型的newsql广泛采纳了类raft复制形式,pg前面有无打算采纳?PG前面有无打算反对列存,这方面的工作进展如何?PG有没有组件反对数据压缩性能,当初有些历史归档库占用空间太大,这块社区有没有打算反对? NO.3连麦对话最初连麦对话环节,Bruce Momjian答复了“他为什么始终以来对技术、对PostgreSQL始终保持酷爱的起因及一些感想。” 以下是对话的大抵内容: 问:在中国,许多像您这个年龄段的人群都在想着如何退休养老,是哪些让您如此执热衷于技术和PostgreSQL数据库? 答:一者是趣味,在我接触数据库的时候,那时的我还非常年老。过后我据说过加密、Hash等名词,但不晓得具体是怎么运行工作,所以我信心用业余时间钻研,包含一些根底的钻研。趣味始终驱使着我前行。二者是经验,年老时我负责过五年的教师职业。老师的经验使我养成了继续学习的习惯。三者是习惯,无论是我在EDB、国内社区还是在家工作,我始终不会丢下趣味,并倒退成为习惯。这就是我放弃酷爱、富裕激情的起因。最初,由衷的感激Bruce Momjian能在百忙之中加入来自中国PostgreSQL分会邀请的《PostgreSQL大咖面对面》流动,其次感激志愿者Cary Huang和David Zhang精确的中英文实时翻译,最初感激来自各界PostgreSQL爱好者和关注者的加入以及PostgreSQL从业者的反对。 Bruce Momjian博客地址:https://momjian.us/main/prese...流动回放视频地址:https://www.bilibili.com/vide...流动PPT获取形式:关注中国PostgreSQL分会官网微信公众号并回复“大咖第一期” 更多精彩内容,请关注以下平台、网站: 中国Postgre SQL分会官网公众号(技术文章、技术流动):开源软件联盟PostgreSQL分会 中国Postgre SQL分会技术问答社区:www.pgfans.cn 中国Postgre SQL分会官方网站:www.postgresqlchina.com

October 22, 2020 · 1 min · jiezi

关于postgresql:回顾历史见证精彩PostgreSQL群英论道

第九届数据技术嘉年华于11月15日至11月16日在北京举办。大会为期两天,来自全国各地的上千名学术精英、数据库领袖人物、数据库专家、技术爱好者汇聚一堂。PostgreSQL作为世界上最弱小的开源关系型数据库,天然不容小视。以下是来自PostgreSQL数据库的大咖: NO.1阿里云资深架构师周正中(德哥)为大家带来《PostgreSQL何以成为年度数据库》 NO.2腾讯数据库高级工程师孙旭为大家带来《CynosDB for PostgreSQL 一主多读架构》 NO.3瀚高软件首席架构师姜瑞海为大家带来《意识最弱小的开源数据库PostgreSQL》 NO.4探探科技数据库团队负责人张文升为大家带来《PostgreSQL在探探的利用实际和架构体系》 NO.5云和恩墨软件开发部研究员刘伟为大家带来《PostgreSQL 12 GA 的新个性》 中国PostgreSQL分会致力于推动PostgreSQL生态倒退,让更多人理解PostgreSQL、用好PostgreSQL。作为本次大会参展商,为期两天的展期让咱们粗浅感触到越来越多的人和企业开始关注开源、关注PostgreSQL。正如德哥所言,前些年讲PostgreSQL的技术简直没人听,当初讲“PostgreSQL为什么这么火?”这样无技术含量的话题竟然十分HOT!科技在变动,时代在倒退。让咱们刮目相待吧! 更多精彩内容,请关注以下平台、网站: 中国Postgre SQL分会官网公众号(技术文章、技术流动):开源软件联盟PostgreSQL分会 中国Postgre SQL分会技术问答社区:www.pgfans.cn 中国Postgre SQL分会官方网站:www.postgresqlchina.com

October 20, 2020 · 1 min · jiezi

关于postgresql:回顾历史见证精彩PostgreSQL实训基地落户大学校园推动高校数据库课程改革

2019年11月,中国PostgreSQL分会带着面向高校的“中国PG象牙塔打算”接连走进沈阳航空航天大学和渤海大学,为两所高校挂牌PostgreSQL实训基地,推动高校数据库根底课程教学改革。 沈阳航空航天大学在沈航PG实训基地挂牌典礼流动上,中国PostgreSQL分会秘书长白国华与沈阳航空航天大学计算机学院院长范纯龙传授独特确定了在沈航进行数据库根底课程教学改革试点打算。依据该打算:将逐步推进高校数据库相干业余根底课程教学改革,将原来以Oracle、SQL Server为主的根底教学框架,课程与教材体系,代替为以PostgreSQL为主的开源数据库内容体系。首要任务是推动高校放慢对开源根底软件研教联合的深入和开源国产化趋势的了解,为高校在技术钻研和人才培养上奠定根底。其次增强高校产学研自主翻新,造就国家使命感和政治责任感。致力在要害畛域上获得冲破。最初要做到在解决核心技术“卡脖子”问题上贡献力量。中国PostgreSQL分会白国华,白秘书长首先向大家介绍了中国PG分会的状况和国内数据库市场现状,并着重解说了国内国内的开源生态倒退。示意人才是PG技术倒退的根底与基本,高校必然须要成为培养、产出PG技术人才的瘠田。“中国PG象牙塔打算”将依靠中国PostgreSQL倒退基金,帮忙沈航在师资、教学、实际、科研等方面发展全方位工作,为PG技术倒退提供更强劲的根底反对和智力撑持,构建更加凋谢、单干、共赢的PG产业生态根底。沈航计算机学院范纯龙院长示意PG实训基地将就PG学生造就、师资培养、教学课改、科研实际四方面发展工作。中国PostgreSQL分会作为国内最重要的PG行业协会组织,学校将与其深刻单干,将高校人才培养与产业倒退紧密结合,产教交融、协同育人。随后中国PG分会与沈阳航空航天大学对于PostgreSQL高校课改签订了初步备忘录。白国华秘书长为沈阳航空航天大学计算机学院范纯龙院长颁发PG实训基地牌匾,为范纯龙院长,张翼飞副院长,夏秀峰、安云哲、刘启文、孙伟东等传授、老师;颁发中国PostgreSQL分会专家委员会聘书。 最初,分会培训认证总监、会员企业代表,辽宁PG利用企业代表(东软)、易迅科技企业代表别离为同学们介绍了PostgreSQL的利用现状及企业人才需求。 渤海大学在渤海大学的流动上,中国PG分会持续与渤海大学签订课改初步备忘录,对课改工作和围绕实训基地开展的教研工作达成单干与施行打算。在授牌环节,中国PostgreSQL分会副秘书长魏波代表分会为渤海大学信息科学与技术学院刘允峰院长颁发PG实训基地牌匾。为刘允峰院长,邢星、赵震、李金山、任远鹏、王晓轩、刘中杰等传授、老师颁发PG分会专家聘书。刘院长发言致谢,对“中国PG象牙塔打算”人才培养的思路和建设计划给予高度评价。他示意实训基地的具体工作方向就是联结中国PostgreSQL分会,将PostgreSQL系统化、体系化的教学成绩带给同学们。 “中国PostgreSQL象牙塔打算”具体内容分为三个层面,五个方向。 三个层面 第一,中国PG分会将会为高校教师开设PG课程,发展PG技术钻研提供必要根底条件。在高校落地PG高校实训基地,帮忙高校师生学习与实际。 第二,中国PG分会反对高校推动数据库教学体系改革,发展PG实训课程并打算用将来5年工夫造就超过10万学生,为PG产业培养象牙塔人才。 第三,中国PG产业倒退基金将提供PG翻新钻研启动基金,激励高校进行数据库畛域的翻新摸索。中国PG分会打算联结100所高校,打造PG高校联结翻新实验室、工作室,疏导高校、钻研机构,产业孵化机构的高端智力投入PG产业。造就卓越的源码贡献者。 五个方向 在师资建设方面,中国PG分会将为高校提供产品文档和根底教学课件、试验案例和数据资源;为高校教师提供师资培训,帮忙高校建设PG师资力量;联合相干技术认证,促成师资队伍建设;筹建数据库翻新工作室和实训基地,帮忙高校教师在校内间接进行技术推广和培训。 在教学方面,中国PG分会将联结100所高等院校发展教学课程改革,学术交流、业余共建、实训基地,业余工作室等单干,独特打造PG人才培养机制。中国PG分会将邀请业内专家走进高校,发展讲座、沙龙,与学生分享前沿技术和行业发展趋势;依靠PG中国认证培训体系,同单干高校打造专业课程和教学计划,深度零碎学习PG技术;搭建企业,院校,学生三方多向供需单干平台,协调企业、院校建设课外“企业订单班”,帮忙校企单干深刻倒退。 在开发者社区方面,中国PG分会经营的PGfans技术社区将会提供大量案例、问答供老师和学生参考,宽广师生有问题能够在中国PG分会技术社区和PG中国support平台发问,相干专家会及时回答。 在实际方面,中国PG分会本着“学以致用”的准则,激励以赛代练,每年会组织PostgreSQL技术比赛,设置奖学金;组织高校学生赴知名企业考查交换、学习,提供会员单位和策略合作伙伴实习机会;反对学生加入中国PG技术能力认证,将会长期保持针对在校生的培训与考试优惠政策。并通过认证和业余比赛帮忙学生和企业进行人才双选。 在科研方面,中国PG分会将联结国内外知名企业,以及中国开源软件联盟、中国软协等官网机构施行PG高校翻新钻研打算,为高校科研机构在课题钻研、科研项目申报提供反对;帮忙各高校成立和建设PostgreSQL翻新实验室,并独特推动技术产业化,打造新型数据库产品。 更多精彩内容,请关注以下平台、网站: 中国Postgre SQL分会官网公众号(技术文章、技术流动):开源软件联盟PostgreSQL分会 中国Postgre SQL分会技术问答社区:www.pgfans.cn 中国Postgre SQL分会官方网站:www.postgresqlchina.com

October 19, 2020 · 1 min · jiezi

关于postgresql:回顾历史见证精彩中国PG象牙塔计划发布首批合作高校授牌仪式在天津举行

2019年9月25日,在天津多所高校领导,国内外出名PG企业代表,以及数百位师生的独特参加下,“中国PostgreSQL象牙塔打算”正式启动!发布会首先为天津市的首批单干高校进行授牌。中国PG分会秘书长白国华别离向北京科技大学天津分校、天津财经大学珠江学院、河北师范大学汇华学院授予“PG高校实训基地”、“高校开源数据库工作室”牌匾。在独特为工作室、实训基地揭幕后,白国华秘书长首先致辞,他心愿以本次单干为契机,在人才培养等方面实现单干共赢,进一步达成资源共享、优势互补,造就更多更好的应用型人才,促成单方共同进步、独特倒退。他示意象牙塔打算会为学生提供更广大的技术学习平台和实习机会,搭建企业高校单干桥梁,充分发挥实训基地的作用。为PG产业造就更多源码贡献者和优良的技术人才。院校代表,天津财经大学珠江学院院长沈鸣致辞。指出深入产教交融、推动教育链和产业链的有机连接是十九大提出的一项重要战略部署,也是利用技术型人才培养的重要模式之一。咱们要以“中国PG象牙塔打算”为契机,与中国PG分会和其余企业独特踊跃创始校企单干、协同育人新场面,助力大学生早日成才。 院校代表,北京科技大学天津学院院长许学东致辞。介绍了该院多年的办学历程和科技翻新、教学科研、师资队伍、业余设置等状况,心愿通过“中国PG象牙塔打算”进一步增强产学研的单干,充分发挥中国PG分会与学校各自的劣势,持续发展多方位、多层次、多元化的单干,独特造就更多专业人才。北京科技大学天津学院学术委员会主席宋存义,几所高校教务处长、招生就业处处长也别离发表讲话致辞。随后,白国华为北京科技大学天津学院院长许学东传授,天津财经大学珠江学院院长沈鸣传授、副院长范铁生、尚翔等领导、传授别离颁发“中国PG分会专家委员会荣誉副主委”聘书;为天津财经大学珠江学院张囡囡老师、北京科技大学天津学院张虹老师等颁发“中国PG分会专家委员会荣誉委员”聘书。PG分会教育与培训执行总监魏波向现场师生介绍了中国PG培训与教育体系详情,以及象牙塔打算具体细则。在接下来的企业代表发言环节,来自AWS、阿里、瀚高的资深数据库专家介绍了PostgreSQL的利用现状及人才需求。人才是PG技术倒退的根底与基本,高校必然须要成为培养、产出PG技术人才的瘠田。“中国PostgreSQL象牙塔打算”,是中国PG分会联结各会员单位和PG产业链企业,依靠中国PG产业倒退基金,致力于推动高等院校PG产学研用生态倒退,造就更多高水平PG技术人才的打算。“中国PG象牙塔打算”将帮忙高校在师资、教学、实际、科研等方面发展全方位工作,为PG技术倒退提供更强劲的智力撑持,构建更加凋谢、单干、共赢的PG产业生态根底。 “中国PostgreSQL象牙塔打算”具体内容分为三个层面,五个方向。 三个层面 第一,中国PG分会将会为高校教师开设PG课程,发展PG技术钻研提供必要根底条件。在高校落地PG高校实训基地,帮忙高校师生学习与实际。 第二,中国PG分会反对高校发展PG实训课程并打算用将来5年工夫造就超过10万学生,为PG产业培养象牙塔人才。 第三,中国PG产业倒退基金将提供PG翻新钻研启动基金,激励高校进行数据库畛域的翻新摸索。中国PG分会打算联结100所高校,打造PG高校联结翻新实验室、工作室,疏导高校科研机构高端智力投入PG产业。造就卓越的源码贡献者。 五个方向 在师资建设方面,中国PG分会将为高校提供产品文档和根底教学课件、试验案例和数据资源;为高校教师提供师资培训,帮忙高校建设PG师资力量;联合相干技术认证,促成师资队伍建设;筹建数据库翻新工作室和实训基地,帮忙高校教师在校内间接进行技术推广和培训。 在教学方面,中国PG分会将联结100所高等院校发展学术交流、业余共建、实训基地,业余工作室等单干,独特打造PG人才培养机制。中国PG分会将邀请业内专家走进高校,发展讲座、沙龙,与学生分享前沿技术和行业发展趋势;依靠PG中国认证培训体系,同单干高校打造专业课程和教学计划,深度零碎学习PG技术;搭建企业,院校,学生三方多向供需单干平台,协调企业、院校建设课外“企业订单班”,帮忙校企单干深刻倒退。 在开发者社区方面,中国PG分会经营的PG技术社区将会提供大量案例、问答供老师和学生参考,宽广师生有问题能够在中国PG分会技术社区和PG中国support平台发问,相干专家会及时回答。 在实际方面,中国PG分会本着“学以致用”的准则,激励以赛代练,每年会组织PostgreSQL技术比赛,设置奖学金;组织高校学生赴知名企业考查交换、学习,提供会员单位和策略合作伙伴实习机会;反对学生加入中国PG技术能力认证,将会长期保持针对在校生的培训与考试优惠政策。并通过认证和业余比赛帮忙学生和企业进行人才双选。 在科研方面,中国PG分会将联结国内外知名企业,以及中国开源软件联盟、中国软协等官网机构施行PG高校翻新钻研打算,为高校科研机构在课题钻研、科研项目申报提供反对;帮忙各高校成立和建设PostgreSQL翻新实验室,并独特推动技术产业化,打造新型数据库产品。 同心合力,多方共赢 To学生: 学习业余技术,把握实战技能,成为新型技术人才。成为PostgreSQL开发者,翻新技术、开辟思路。取得PG待业体系撑持,减少待业渠道To院校: 推动业余建设,进步行业内知名度和影响力开辟社会须要的技能人才,晋升学校就业率和待业品质晋升科研能力,促成科研成果转化To企业: 减少人才获取渠道,低成本获取高水平技术人才晋升企业知名度和影响力本次流动标记着“中国PG象牙塔打算”的正式落地,PG教育与培训工作第一次系统性、体系化的走进中国高校大门,中国PG生态根底建设迈入了新的倒退阶段。中国PG分会将持续发展与高校的严密单干,为PG技术倒退提供更强劲的智力撑持,构建更加凋谢、单干、共赢的PG产业生态根底! 更多精彩内容,请关注以下平台、网站: 中国Postgre SQL分会官网公众号(技术文章、技术流动):开源软件联盟PostgreSQL分会 中国Postgre SQL分会技术问答社区:www.pgfans.cn 中国Postgre SQL分会官方网站:www.postgresqlchina.com

October 12, 2020 · 1 min · jiezi

关于postgresql:与百位数据库大咖同台PGConfAsia2020大会议题招募进行中

特邀国内嘉宾 特邀国内嘉宾 特邀教育界嘉宾本次大会除线上会议外,局部教育界嘉宾将于10月23日加入由中国计算机学会主办,山东大学和中国开源软件联盟PG分会独特承办的“CNCC中国计算机大会2020数据库分会场”暨“PGconf.Asia2020大会产教融合线下分会场”。另一部分无奈加入线下会议的嘉宾则线上加入“PGconf.Asia2020大会产教交融分会场”。 议题招募进行时截止2020.10.10 申请邮箱:meeting@postgresqlchina.com议题演讲方向:数据库优化、分布式、数据迁徙、高可用、平安合规、运维治理、用户案例、数据库开发、云数据库服务、内核开发、PG internal等演讲模式:线上(中文)申请信息:个人简历(中英文)+议题概要(中英文)议题审核:由PG国内社区与PGConf组委会联结审核,并确认最终承受名单截止工夫:10月10日晚12点(北京工夫)审核回复:10月15日-10月20日对于PostgresConf.CN&PGConf.Asia2020大会作为寰球最大、最出名的PG序列会议,从纽约到莫斯科,从里约热内卢到约翰内斯堡,寰球各地区都有PGConf在运行。而亚洲规格最高的PG技术盛会—PGConf.Asia大会,将于往年11月首度在中国举办。中国开源软件联盟PG分会作为东道主承办本次会议,采纳”线上线下联合“的模式,通过墨天轮社区面向寰球直播。本次大会将集中国PG力量和亚洲次要PG贡献者、利用企业独特打造亚洲范畴内最大规模的PG生态会议。 本届PGConf.Asia大会将与PostgresConf.CN中国大会联结举办。PostgresConf.CN中国大会同样是列入PostgresConf会议序列的寰球正式会议,同时也是中国区规模最大、规格最高的PG生态会议,自2017年起,已间断举办三届。往年的大会将持续立足于国内PG行业,为观众提供最清晰、最独特的视角。 更多精彩内容,请关注以下平台、网站: 中国Postgre SQL分会官网公众号(技术文章、技术流动):开源软件联盟PostgreSQL分会 中国Postgre SQL分会技术问答社区:www.pgfans.cn 中国Postgre SQL分会官方网站:www.postgresqlchina.com

October 9, 2020 · 1 min · jiezi

关于postgresql:开源软件联盟PostgreSQL分会喜迎中秋国庆

秋风送爽,丹桂飘香,雏菊绽开!随同着开源软件联盟PostgreSQL分会的蓬勃发展,在这丰登的节令,咱们迎来了一年一度的中秋国庆双佳节!中秋国庆喜相逢,小家大家情相通。 此时此刻在这万家离散之际,举国欢庆之时,开源软件联盟PostgreSQL分会全体成员衷心的祝福你和你的家人身体健康,万事如意,阖家欢乐! 感谢您这一年来对开源软件联盟PostgreSQL分会的关怀和反对,借此佳节表白感激。对此开源软件联盟PostgreSQL分会特地筹备节日礼物等你来拿!参加流动,说出开源软件联盟PostgreSQL分会对你印象最粗浅的帮忙。扫描屏幕下方二维码关注公众号邀请更多小伙伴入盟,支付数据库资源! 流动工夫:2020.9.30至10.01 舒适提醒:关注并回复—祝PG分会节日快乐,参加流动哦!

September 30, 2020 · 1 min · jiezi

关于postgresql:历史回顾2019让PG‘象前行活动奔赴成都成功举行

8月28日,“PG培训认证全国巡讲与技术沙龙流动”第二站在成都闭幕,本次流动由中国PG分会专家委员会委员、晟数学院院长崔旭,中国PG分会认证培训执行总监魏波,中国PG分会金牌认证讲师刘彦红别离作专题培训。三位专家为各位PGer带来了PG数据库技术,利用开发和数据迁徙相干的培训内容。 一、中国PG分会专家委员会委员、晟数学院院长崔旭崔旭院长作为中国OCM联盟核心成员,长期从事Oracle培训教学工作,本次流动,崔院长带来了“Oracle向PG职业倒退之路”的专题培训和分享。崔院长的培训,奇妙地将Oracle和PG的并行学习,Oracle与PG的共通性、可替代性,差异化的利用技巧融汇在一起,为在场的PG技术人员指明了学习和职业倒退的新方向。崔院长的分享也充分体现了中国PG认证培训体系建设的目标与意义——让更多的Oracle专业培训机构和优秀人才向PG转移,吸引他们的智慧和力量,以及在培训教育上的业余能力,疾速的进步中国PG培训的落地能力,从而为国内PG生态倒退提供撑持。 二、中国PG分会认证培训执行总监魏波中国PG分会培训认证执行总监魏波首先介绍了中国PG培训认证体系,之后是对PostgreSQL利用治理根底相干内容的培训,其中包含装置应用、服务治理、体系结构等内容。 三、中国PG分会金牌讲师刘彦红中国PG分会金牌认证讲师刘彦红随后为大家带来了《Oracle到PostgreSQL最佳实际》,她着重介绍了迁徙流程、迁徙工具,数据迁徙类型、未兼容语法等方面的内容。 PG作为最平安、最合规、最凋谢和最开源的数据库,必将在国内迎来更大的倒退机会。能够预感将来会有更多的OCM讲师,Oracle ACE退出PG分会,将工作重心转入到PG畛域。中国PG分会欢送越来越多的业余机构和企业向PG技术转移,欢送更多的人才与智力退出进PG畛域,独特做强中国PG力量! 更多精彩内容,请关注以下平台、网站: 中国PostgreSQL分会官网公众号(技术文章、技术流动):开源软件联盟PostgreSQL分会 中国PostgreSQL分会技术问答社区:www.pgfans.cn 中国PostgreSQL分会官方网站:www.postgresqlchina.com

September 29, 2020 · 1 min · jiezi

关于postgresql:历史回顾2019让PG‘象前行活动奔赴上海成功举行

8月15日,“让PG‘象’前行”2019PG培训认证全国巡讲与技术沙龙流动首站在上海胜利举办,五十余位PGer座无虚席,共飨这场技术交流会。这标记着PG分会全国巡回流动正式起航,同时这也是中国开源软件联盟PG分会倒退PG中国生态的一项要害动作。技术交流活动由上海软件产业促成核心主任徐玉清博士致辞,恩墨学院开源数据库总监张甦、中国PG分会认证培训执行总监魏波别离作专题培训,分会认证讲师团队也终于揭开了面纱,首位认证金牌讲师刘彦红带来了利用开发和数据迁徙相干的培训内容。 上海软件产业促成核心主任徐雨清博士致辞 恩墨学院开源数据库总监张甦作专题培训 中国PG分会认证培训执行总监魏波作专题培训 中国PG分会金牌讲师刘彦红作专题培训 本次流动次要在PostgreSQL利用治理根底、Oracle到PostgreSQL实际等方面进行了培训,总结和展现了PG中国认证培训的工作的阶段性成绩。首站巡回流动的胜利举办,为PG在中国的推广倒退注入新生机、新智慧,同时中国PG分会基于本身能力,将为PG产业继续进行赋能输入工作,携手中国PG力量推广新技术、新利用、新模式,独特营造凋谢、平等、共享、共赢的PG倒退环境,放慢PG中国生态构建,推动PG在中国衰弱继续倒退! 更多精彩内容,请关注以下平台、网站: 中国Postgre SQL分会官网公众号(技术文章、技术流动):开源软件联盟PostgreSQL分会 中国Postgre SQL分会技术问答社区:www.pgfans.cn 中国Postgre SQL分会官方网站:www.postgresqlchina.com

September 25, 2020 · 1 min · jiezi

关于postgresql:回顾历史见证精彩PostgresConfCN2019培训日圆满结束-大会完美收官

7月7日,PostgresConf.CN2019大会(简称“PCC2019”)最初一天,『Training Day』与400余名PGer一起,阿里云高级产品专家德哥,成都文武信息技术有限公司CEO朱贤文持续为PGer分享了一场PG技术开发盛宴。 Training Day,从PG内核开发、企业应用案例、数据库治理技术等多个角度,为到场观众奉献了精彩的演讲,旨在传递最新的PG技术,分享PG利用教训,力求与各位PGer独特推动新时代下的PG利用翻新! PCC-Training Day,两天的工夫,报告激扬,碰撞技术,智慧升维,震撼、打动、播种、铭刻,至此,PostgresConf.CN2019大会正式落下帷幕,让咱们明年再会! 更多精彩内容,请关注以下平台、网站: 中国Postgre SQL分会官网公众号(技术文章、技术流动):开源软件联盟PostgreSQL分会 中国Postgre SQL分会技术问答社区:www.pgfans.cn 中国Postgre SQL分会官方网站:www.postgresqlchina.com

September 23, 2020 · 1 min · jiezi

关于postgresql:PostgresConfCN-PGConfAsia-2020大会来啦

PGConf.Asia大会首次中国承办在寰球范畴,各国PG的利用和倒退都在疾速回升,亚太区域正成为寰球最大的利用阵地。这得益于开源文化与价值观的遍及,得益于寰球新经济浪潮的倒退,也得益于PG对云计算、大数据良好的反对体现。 作为寰球最大、最出名的PG序列会议,从纽约到莫斯科,从里约热内卢到约翰内斯堡,寰球各地区都有PGConf在运行。而亚洲规格最高的PG技术盛会—PGConf.Asia大会,将于往年11月首度在中国举办。中国开源软件联盟PG分会作为东道主承办本次会议,采纳”线上线下联合“的模式,通过墨天轮社区面向寰球直播。本次大会将集中国PG力量和亚洲次要PG贡献者、利用企业独特打造亚洲范畴内最大规模的PG生态会议。 PGConf组织主席Joshua.D.Drake示意:“PG在亚洲正以前所未有的速度向前倒退。单干是要害,咱们心愿为所有人——无论是PG开发者,还是PG利用企业,为他们发明和凋谢交换、学习的机会” 塑造全新PG中国生态本届PGConf.Asia大会将与PostgresConf.CN中国大会联结举办。PostgresConf.CN中国大会同样是列入PostgresConf会议序列的寰球正式会议,同时也是中国区规模最大、规格最高的PG生态会议,自2017年起,已间断举办三届。往年的大会将持续立足于国内PG行业,为观众提供最清晰、最独特的视角。 (上届回顾:创立PG寰球生态!PostgresConf.CN2019大会隆重召开) 除国内出名行业首领演讲分享之外,本届大会主论坛还有六大重磅典礼,包含: 1.PG中国技术评比颁奖仪式一年一度的中国PG数据库畛域技术、产品与计划、人物大型评选活动,力求展示国内对PG畛域起到重大推动与奉献作用的热点技术、企业与技术专家。 2.PG中国开发者社区及盘古协定发布会中国开发者社区,旨在团结国内从事PG内核性能研发的开发人员,通过社区合作的形式,回馈开源。在与PostgreSQL国内社区深刻单干的根底上实现自主循环,为国内数据库产业倒退贡献力量,担当国家使命。 3.中国首批PG ACE授予典礼基于PG在中国倒退的良好态势,由中国开源软件联盟PG分会重点推出”PG ACE打算",用来推动更多的从业者参加PG生态建设,以及抵赖和表彰那些在国内PG产业倒退、技术交换和推广应用方面卓有奉献的人士。 4.中国首届高校PG技术比赛颁奖仪式为推动高校开源根底软件“教学-实际”联合,加深师生对开源国产化趋势的了解,拓宽高校人才培养模式,中国开源软件联盟PG分会联结知名企业和资深从业者,将面向国内高校举办首届全国高校PG技术比赛。 5.数据库产教交融联盟发布会人才是技术倒退的要害因素。为贯彻落实国务院对于产教交融的改革部署,中国开源软件联盟PG分会将联合国内政府主管部门、知名企业、资深从业者与全国范畴内的各类型高校,建设创新型数据库产教交融翻新平台,在学科设置、课程建设、实训基地、科研攻关等方面发展全方位工作。 6.首批PGCM巨匠授予典礼通过一年的经营,由中国开源软件联盟PG分会联结中国电子工业标准化协会 携手打造、科学化评定职业技能的中国PG培训认证,已累计有来自300余家企业的1500余名初、中级认证考生。作为PG技术能力认证体系的巅峰—PGCM(PG巨匠)将于下半年举办首次考试。中国惟一,寰球认可,中国首批PG巨匠将在大会主论坛公布和授予。 聚焦亚洲,融汇寰球出名PG专家聚焦亚洲。除国内知名企业首领、技术布道者之外,还有来自日本PG用户组、印尼PG用户组、韩国PG用户组、菲律宾PG用户组、巴基斯坦PG用户组、泰国PG用户组、越南PG用户组的数十位出名国外大咖。 亚洲大会,不止步于亚洲。美国PG用户组、欧洲PG用户组、俄罗斯PG用户组也将有重磅嘉宾进行主题分享,独特为您带来一场融汇寰球的PG技术盛宴。 寰球on-line,值得期待 更多精彩内容,请关注以下平台、网站: 中国Postgre SQL分会官网公众号(技术文章、技术流动):开源软件联盟PostgreSQL分会 中国Postgre SQL分会技术问答社区:www.pgfans.cn 中国Postgre SQL分会官方网站:www.postgresqlchina.com

September 22, 2020 · 1 min · jiezi

关于postgresql:回顾历史见证精彩PostgresConfCN2019培训日现场速递

7月6日,PostgresConf.CN2019培训日高能开讲,吸引400余名PGer到场学习,学术气氛超级强烈。 超高人气的背地,一方面来自越来越被看好的PG中国生态;另一方面要数本次PG技术培训日的硬核干货了,阿里云高级产品专家德哥,成都文武信息技术有限公司CEO朱贤文,微软首席产品经理宋青见、梁晨,中国PG分会培训认证委员会执行总监魏波,瀚高软件高级研发工程师田兵特地打造的四场多维度深度培训课程,既适宜PG入门、又适宜进阶之旅。上面就来看小编现场发来的图片报道,感受一下PCC2019-Training Day的超燃氛围吧! PostgreSQL深度体系化培训专场 PG系统化根底培训专场 微软专场培训:深刻理解云上的PG PG高可用培训专场 更多精彩内容,请关注以下平台、网站: 中国Postgre SQL分会官网公众号(技术文章、技术流动):开源软件联盟PostgreSQL分会 中国Postgre SQL分会技术问答社区:www.pgfans.cn 中国Postgre SQL分会官方网站:www.postgresqlchina.com

September 17, 2020 · 1 min · jiezi

关于postgresql:回顾历史见证精彩PostgresConfCN2019大会三大分论坛

7月5日PostgresConf.CN2019大会3场分论坛精彩举办接下来小编带你重温各场分论坛精彩霎时 分论坛1-全英文(国内嘉宾)专场全英文专场,汇聚英美日俄巴等多位顶尖国内专家组成奢华阵容,汇聚PGer科技智慧与翻新思维,聚焦整个PG产业及行业生态,分享PostgreSQL国内前沿技术和最佳利用实际,推动PG中国倒退! PostgresConf联结主席Joshua.D.Drake 俄罗斯Postgres Professional公司CEO-Oleg Bartunov Percona公司软件工程师Ibrar Ahmed博士;《PostgreSQL 9X之巅》作者 瀚高软件资深数据库开发总监,前EDB资深数据库开发总监Ashan Hadi 美国亚马逊公司软件工程师John Solomon 前EDB资深数据库架构师Muhammad Usama 日本NTT公司软件工程师Masahiko Sawada 前EDB资深数据库架构师Rana Asif Rehman 前EDB资深数据库架构师Hamid Quddus Akhtar 分论坛2-PG多畛域最佳实际信息化时代,技术更新迭代放慢,如何把握转型关键点?如何应用PostgreSQL翻新高效驱动力?PG多畛域最佳实际分论坛汇聚阿里、微软、IBM、Pivotal、瀚高、文武、百度图、世纪国源等企业当先专家为与会者分享PG在各行业的利用和案例! 瀚高软件高级研发工程师邵大明 微软寰球黑带-大数据平台技术专家赵阳 成都文武信息技术有限公司CEO朱贤文 百度图数据库专家李章梅 Pivotal Greenplum资深工程师陈金豹 超图团体副总裁,超图研究院院长李绍俊 阿里云数据库解决方案架构师樊文凯 安全科技资深数据库工程师石勇虎 世纪国源北京软件研经发部理鲁洋 分论坛3-新期间PG与PG商业发行版生态倒退在“新期间PG与PG商业发行版生态倒退”论坛,开源根底软件领军型企业、根底软件畛域翻新守业型企业、云生态厂商、国产化生态链企业、大型PG企业级客户等同聚一堂,独特探讨、瞻望PG翻新利用的新将来。 上海根底软件技术钻研核心主任,中标软件副总经理李震宁 龙芯中科技术有限公司技术总监靳国杰博士 中国信通院数据库技术专家李俊逸 浪潮商用机器有限公司资深架构师李松青 亚信科技AntDB总监姜明俊 瀚高软件高级研发工程师田兵 华宇软件高级研发工程师张升玺 Pivotal Greenplum资深产品经理李阳 阿里云数据库专家王健 阿里云数据库专家林翳 推动PG产业倒退须要宽泛参加、集思广益,同时心愿业界开源同仁积极参与PG社区建设,欠缺PG生态,中国开源软件推动联盟PG分会将致力于同各位同志者独特营造凋谢、平等、共享、共赢的PG倒退环境。推动重点畛域的PG研发技术创新,增强中国PG遍及利用。围绕国内政务、金融、能源、制作等各行业倒退需要,深入研究适宜PG的利用场景,造成可复制、可推广的PG利用解决方案,晋升PG寰球生态倒退! 更多精彩内容,请关注以下平台、网站: 中国Postgre SQL分会官网公众号(技术文章、技术流动):开源软件联盟PostgreSQL分会 中国Postgre SQL分会技术问答社区:www.pgfans.cn 中国Postgre SQL分会官方网站:www.postgresqlchina.com

September 16, 2020 · 1 min · jiezi

关于postgresql:回顾历史见证精彩PostgresConfCN2019大会盛大开幕

2019年7月4日,PostgresConf.CN2019大会在北京香格里拉饭店盛大举行!本次大会由中国PG分会、PostgreSQL基金会、PostgresConf国内会议组织联结举办,失去了PostgreSQL国内社区全力支持与帮忙,被列为Postgresql.org官网寰球重要会议。来自国内外五百余名PostgreSQL使用者和爱好者齐聚北京,见证此次盛会的召开。 PostgresConf.CN是面向寰球PostgreSQL开发者和使用者的年度盛会。本届大会吸引了来自寰球的PostgreSQL社区的核心成员及应用PostgreSQL的企业用户、个人用户,会议由中国PG分会国内参谋委员会秘书长周宝峰主持,中国PG分会会长萧少聪致辞,并对本次大会的赞助商浪潮商用、亚马逊、阿里云、瀚高、微软等致以诚挚的感激。是一场汇聚各界PostgreSQL大咖、交换最新业界技术动静和实在利用案例的盛宴。 本次大会以“将来已来”为主题,共有50余场技术分享,邀请超过百余名国内外出名专家,包含来自阿里、浪潮、安全、亚马逊、pivotal、IBM、微软、瀚高、文武科技、探探等各个用户企业的案例分享,为宽广PGer提供了一场技术的饕餮盛宴。 让咱们一起来见证首日精彩! 中国开源软件联盟副主席刘澎发表重要演讲,他指出开源代表的共享经济胜利定律,开源成为当今翻新的次要源泉,中国逐步成为美国之外的第二大开源热点区域。 PostgresConf联结主席Joshua D. Drake (JD)发表以《The World’s Database》的主题演讲! 本次大会,中国PostgreSQL分会组织首次PG数据库畛域技术、产品与计划、人物大型评选活动,全面展示国内对PG畛域起到了重大推动与奉献作用的热点技术、企业与技术专家,出名PG领域专家等与技术相干的诸多业内人士缺席了颁奖典礼,独特回望与总结了PG畛域的倒退成就! 中国PostgreSQL培训认证体系发布会正式公布!由中国开源软件推动联盟PostgreSQL分会同国内权威认证机构独特打造,旨在更无效的为企业提供PG技术人才,推动PG在国内的疾速倒退提供必要撑持,为从事PG相干工作的人员,提供间接、高效的培训领导,以及提供权威的PG技能等级认证! 德国Credativ公司总裁兼首席执行官Michael Meskes发表演讲。 阿里巴巴团体副总裁李飞飞博士带来《阿里云PostgreSQL生态》的精彩分享! 瀚高软件首席科学家郑晓军带来《翻新不止-从PG的使用者到PG的参与者》的精彩分享! 浪潮商用总经理胡雷钧带来《拥抱开源,凋谢翻新的Power平台减速数字化转型》的精彩演讲! 中国PG分会会长,阿里云资深产品专家萧少聪带来《“一键迁徙”的全链路保障》的精彩分享! 安全科技数据库与存储产品总经理带来《安全团体推广PG的5年心路历程》精彩分享! 探探数据库团队负责人张文升带来《PostgreSQL基准测试与性能调优》的精彩分享! 最初的顶峰对话更是把会议推上了低潮,是一场强强联合的高端PG技术和利用研讨会,它必将对PG将来生态倒退产生重要影响! 更多精彩内容,请关注以下平台、网站: 中国Postgre SQL分会官网公众号(技术文章、技术流动):开源软件联盟PostgreSQL分会 中国Postgre SQL分会技术问答社区:www.pgfans.cn 中国Postgre SQL分会官方网站:www.postgresqlchina.com

September 11, 2020 · 1 min · jiezi

关于postgresql:从Oracle迁移到PostgreSQL的十大理由

作者:保罗·纳穆格Paul Namuag可能负责各种职务,受害于在过来的18年中有机会应用各种技术。他从2005年开始负责图形艺术家和MS .Net开发人员,并转而应用开源技术,并且是应用LAMP stack的Web开发人员。之后,他是一名软件工程师/游戏工程师,曾与多家公司合作开发挪动或桌面和Web应用程序。2013年下半年,他转任MySQL反对工程师,而后成为Percona的近程DBA,从而有机会理解大数据,高可伸缩性,高可用性应用程序的工作形式。 前言Oracle关系数据库管理系统(RDBMS)已被企业宽泛应用,迄今为止被认为是市场上最先进的数据库技术。通常,它是RDBMS中最常拿来与其余数据库进行比拟的的产品,充当了产品应提供的规范“事实”。db-engines.com将其评为当今市场上排名第一的RDBMS。PostgreSQL被列为第四名RDBMS,但这并不意味着迁徙到PostgreSQL没有任何劣势。PostgreSQL自1989年以来始终存在,并于1996年凋谢源代码。PostgreSQL从2017年和2018年间断两年取得年度DBMS奖。这表明它从没有进行吸引大量用户和企业的青眼。 PostgreSQL之所以引起宽泛关注的起因之一是因为人们正在寻找Oracle的代替产品,以便他们能够削减组织的高老本并防止供应商的锁定。 从工作高效的Oracle数据库迁徙可能是一项艰巨的工作。诸如公司的TCO(总领有老本)之类的担心是公司迁延决定是否放弃甲骨文的起因之一。 在此博客中,咱们将介绍一些公司抉择来到Oracle并迁徙到PostgreSQL的次要起因。 起因一:这是一个真正的开源我的项目PostgreSQL是开源的,并依据 PostgreSQL许可证发行, PostgreSQL许可证是自在的开源许可证,相似于BSD或MIT许可证。取得产品和反对不须要任何费用。 如果要应用数据库软件,则意味着您能够收费取得PostgreSQL数据库的所有可用性能。PostgreSQL在数据库畛域已有30多年的悠久历史,自1996年以来就始终以开源为根底。数十年来,开发人员始终致力于创立扩大性能。这自身就能促使开发人员,机构和组织抉择PostgreSQL用于企业应用程序,反对当先的业务和挪动应用程序。 企业再次意识到,像Postgres这样的开源数据库解决方案提供了更大的容量,灵活性和反对,而并不齐全依赖于任何一家公司或开发人员。与以前的Linux一样,Postgres由致力于解决日常业务问题,并抉择将解决方案返回给社区的用户设计(并将持续放弃)。与像Oracle这样的大型开发商不同,后者可能有不同的动机来开发有利可图的产品或反对狭隘但有利润的市场,而Postgres社区致力于为用户日常应用关系数据库开发最好的工具。 PostgreSQL通常执行这些工作而不会减少太多复杂性。其设计严格专一于解决数据库,而不用浪费资源,例如通过增加性能来治理其余IT环境。这是该开源软件的使用者从Oracle迁徙到PostgreSQL时的事件之一。花大量工夫钻研无关Oracle数据库如何运行或如何优化和调优的简单技术,最终可能会失去其低廉的反对。这吸引了机构或组织寻找代替计划,能够加重老本的同时,带来利润和生产率。请查看咱们以前的博客,理解PostgreSQL在SQL语法和Oracle语法之间的匹配能力。 起因二:没有许可限度,而且社区很大对于Oracle RDBMS平台的用户来说,很难找到任何类型的收费或不收取高额费用的社区反对。机构,组织和开发人员通常能在网上找到代替信息,这些信息能够收费提供问题的答案或解决方案。 应用Oracle时,很难确定是否抉择产品技术支持,因为,通常波及较多费用。应用PostgreSQL,该社区是收费的,并且有很多领有丰盛教训的专家,他们乐于为您解决以后的问题。 您能够在这里https://lists.postgresql.org/ 订阅邮件列表,以开始与社区分割。接触PostgreSQL 的老手或蠢才可在这里进行交换,展现和共享解决方案、技术、谬误、新发现,甚至共享其新兴软件。您甚至能够应用irc.freenode.net并退出#postgresql频道,从IRC聊天中寻求帮忙。您还能够退出https://postgres-slack.herokuapp.com/或https://postgresteam.slack.com/通过Slack与社区分割。有很多抉择,很多开源组织能够为您提供帮忙。 无关从何处开始的更多详细信息,请拜访https://www.postgresql.org/community/。 如果您违心为PostgreSQL中更优质的业余服务买单,这里也有很多抉择。即便在网站https://www.postgresql.org/support/professional_support/northamerica/上查看,也能够找到大量公司,其中一些公司的价格便宜。即便在Severalnines,咱们也提供对Postgres的反对,它是ClusterControl许可或DBA技术咨询的一部分。 起因三:广泛支持SQL一致性PostgreSQL始终热衷于适应和遵循SQL语言规范。SQL规范的正式名称是ISO/IEC 9075“数据库语言SQL”。规范发行版的任何后续订正版本都将替换以前的版本,因而宣称与晚期版本保持一致并没有多少价值。 与Oracle不同,依然存在一些不合乎ANSI规范SQL(结构化查询语言)的关键字或运算符。例如,初学者容易混同的OUTER JOIN(+)(Oracle运算符语法)。PostgreSQL遵循用于JOIN语法的ANSI-SQL规范,并具备与其余开源RDBMS数据库(例如MySQL/Percona/MariaDB数据库)轻松跳转的劣势。 在Oracle中十分常见的另一种语法是应用分层查问。Oracle应用非标准的START WITH..CONNECT BY语法,而在SQL:1999中,层次结构查问是通过递归通用表表达式(CTE)实现的。例如,比照以下分层查问的不同表白: OracleSELECT restaurant\_name, city\_nameFROM restaurants rsSTART WITHrs.city\_name = 'TOKYO'CONNECT BY PRIOR rs.restaurant\_name = rs.city\_name; PostgreSQLWITH RECURSIVE tmp AS (SELECT restaurant\_name, city\_name FROM restaurants WHERE city\_name = 'TOKYO' UNION SELECT m.restaurant\_name, m.city\_name FROM restaurants m JOIN tmp ON tmp.restaurant\_name = m.city\_name) SELECT restaurant\_name, city\_name FROM tmp; ...

September 1, 2020 · 2 min · jiezi

关于postgresql:PostgreSQL是世界上最好的数据库

作者:柯克·罗伊巴尔 Kirk Roybal是PostgreSQL的狂热者,并定期为2ndQuadrant博客做奉献。 前言首先申明,我不是题目党,刻意引诱点击或夸张形容。我打算证实,无论有没有金钱方面的思考,通过设计和实现,PostgreSQL都能够主观,可掂量地比以后可用的数据库更好。到底我怎样才能证实这样一种高尚的说法是正确的呢?持续浏览,可恶的读者。我保障不会节约您的工夫。 平安通明PostgreSQL有一个平安邮件列表。PostgreSQL项目组与其余所有人在同时学习入侵向量。没有什么是暗藏的,任何发现的货色都以使商业供应商头晕目眩的速度进行工作。供应商提供了正在审查的软件,他们所提供的的缺点列表会更简短。这意味着所有已知的攻打载体一旦公开就会被解决。这种平安响应能力在商业畛域甚至是不可估量的。对于商业供应商来说,在问题失去解决之前窃密对补救至关重要。PostgreSQL却没有这样的限度,这是不是很棒呢! 多版本并发管制对您有益处PostgreSQL抉择了一种并发管制办法,该办法最适宜高INSERT和SELECT工作负载。PostgreSQL的设计非常简单,只需记住更新和删除的跟踪开销。重要的是,如果您尊重数据,则应该尝试拥抱PostgreSQL为您提供的数据安全性。PostgreSQL中DDL也能参加事务。齐全迁徙或齐全有效(最蹩脚的一种有效办法是近乎马上实现的废除)。测试用例也能够重建。须要重置测试工具吗?答案是只需回滚事务。PostgreSQL反对符合标准的事务隔离模式,包含序列化,已提交读和可反复读。这些办法完全符合ACID规范。 PostgreSQL简直能做所有事件那么,您想应用NoSQL、Riak、REACT、Redis、Mongo等的性能吗?PostgreSQL都具备这种能力。不可否认,不能包含原始产品的所有细节。例如,PostgreSQL不会为您创立新的分片,那依然是一个手动过程。但总有方法,譬如pg_partman。您想要列数据存储吗?hstore可供选择。您不想再培训员工吗?应用您已抉择的语言持续拓展业务。您要局部复制吗?流式逻辑复制适宜您。您要从其余零碎提取数据吗?PostgreSQL具备所有数据库中最沉闷的联邦对象汇合-内部数据包装器(FDW),您能够用胶带和拉链将PostgreSQL挂接鳄鱼身上。能够对他像看待您本人的数据一样。很难想到一个PostgreSQL不具备的性能,或者没有PostgreSQL扩大所能提供的性能。 扩大地图功能能够说PostGIS社区可能比PostgreSQL社区自身更大。PostgreSQL的映射性能将其放在了一个类中,即便与十分低廉的替代品相比也是如此。PostGIS我的项目之所以抉择PostgreSQL作为平台,是因为其易扩展性和丰盛的数据性能。这些性能能够间接公开给其余任何我的项目应用。任何其余供应商,无论是商业的还是开源的,都无法回答这些问题。 PostgreSQL在开源畛域正在引领倒退PostgreSQL我的项目是开源软件中最引人注目的组织之一。随着社区宏大的力量和微小的增长,当初能够说它所存在的任何有余都会在其余供应商意想不到的工夫内被解决。简直每天都有新的企业级性能个性公布,保护这些个性的员工是从每家公司都心愿聘用的蠢才中筛选进去的,只是人手远远不够。 PostgreSQL建设了长期稳固的解决方案PostgreSQL在内核中内置了逻辑复制。这容许跨版本迁徙。您没有被锁定到特定的硬件或软件版本。该解决方案能够有限降级。此外,许多平台都反对PostgreSQL,包含Linux的超稳定版本。你是否须要一个比典型的3~5年投资回报率还长的解决方案?即便你素来没有降级过硬件,PostgreSQL也会永远反对你。费用很容易计算,0美元。 申明式优于命令式数据库语言通常是申明性的。也就是说,您应用本人抉择的内置语言编写了一个查问,形容了您心愿看到的后果。该数据库尝试解码您的用意,并提供适当的后果。这是所有申明式编程模型的根底。在PostgreSQL中,这能够归结为将函数映射到SQL语言中的关键字,有时还会有几个算法抉择来准确地实现每个申明。在对于命令式与申明式编程模型的古老争执中,我感觉申明式编程只是一种假装的命令式编程。数据库查询语言中的每个申明性令牌最终都映射到一种或几种以命令式术语利用申明的算法。因而,由Henrietta定义的阻抗失配最终是由开发人员决定的。也就是说,如果开发人员的思维形式与数据库函数程序员的思维形式完全一致,那么就不会呈现不匹配。那么,假如一个模型只是另一个模型的调用特色,那么申明式模型最终将比命令模型更好吗?很快乐您这么问,因为这正是我要强调的一点。PostgreSQL开发人员比拟聪慧。我不是开玩笑或忸怩作态。从字面上看,成千上万的贡献者为PostgreSQL我的项目做出了数以百万计的奉献,其中许多是对其余贡献者的改良。你头脑中想到的任何状况比起曾经实现的性能更好的机会是非常低的。而且,即便你的想法更好,你也应该把它们奉献给PostgreSQL我的项目,以造福所有人,从而进步其他人的规范。那么,是什么让PostgreSQL那么精彩呢?无需思考公司利益即可在寰球范畴内共享思维。成千上万的开发人员正在破费数十万小时来做出更好的算法抉择。因而,您的软件在每个版本中都会变得更好,通常不须要做任何特地的事件。您说,这难道不是软件的实质吗?嗯,是的。但远不迭整个世界范畴的人才都参加到你的我的项目中来。PostgreSQL在开源社区中享有十分显著的位置。商业供应商将永远无奈跟上开源我的项目在这个档次上所能提供的变动速度。向开源(尤其是PostgreSQL)的迁徙就是证实。商业供应商能够指出的显著劣势曾经所剩无几了。其中包含SMP反对、双向复制和内部工具。猜猜社区当初正在做什么,很可能这些在将来几年将得以公布。 任意扩大PostgreSQLPostgreSQL有一个充满活力的编写辅助软件的技术社区。这包含插入您喜爱的任何语言,并应用它以有用的任何形式扩大PostgreSQL。您是否喜爱perl字符串解决?好的,能够应用它。Python地图反对怎么样?当然,只需插入python就能够进城了。是否想应用PostgreSQL后端编写Web服务?太棒了,PostgreSQL会帮上忙。JSON?好。XML?PostgreSQL对所有这些都有间接的反对,并且提供了有限的反对。如果您认为能够应用一种很好的语言,则将其插入PostgreSQL,而后将其放在服务器端即可。您能够创立本人的函数,数据类型,运算符,汇合,窗口函数或简直其余任何货色。没有看到您喜爱的性能?从源代码拷贝并自定义它。因为许可证,您能够自在地这样做。PostgreSQL还提供了一些钩子函数,容许您扩大数据库而不用进行极其的编程。这种排汇任何其余语言个性的能力是PostgreSQL所独有的。您能够应用现有的任何规范库来提供任何个性。你能够遵循规范,跟上变动,能够在PostgreSQL尚在运行时对其进行更新,并且能够收费实现所有操作。 大而广PostgreSQL具备多种性能,能够充分利用已提供的硬件平台。分区,并行执行,局部索引,表空间,缓存和并行非阻塞保护例程(PostgreSQL中简直所有货色最近都在应用CONCURRENTLY关键字)如果这还不足以满足您的需要,那么物理流复制将以便宜的价格为您提供您所需数量的可读从节点。分片、内存缓存、队列、负载平衡和连接池都能够在PostgreSQL中应用。还不够吗?逻辑流复制怎么样?您想对世界范畴的数据库进行天文分区吗?好了,欢送应用双向复制。而且价格依然是0美元。 索引丰盛PostgreSQL反对如此多的索引列表,以至于使人难以确定如何应用它们。GiST、spi - GiST、KNN GiST、GIN、BRIN和Btree都是可用的。还有很多其余性能能够通过扩大实现,例如Bloom过滤器等。PostgreSQL能够将它们与函数驱动的索引,局部索引,笼罩索引和全文搜寻一起应用。这些扩大性能不是互斥的。您能够同时应用它们。 数据“推手”曾经提到的几种技术使PostgreSQL成为了杰出的数据集成和散发平台。多种形式的复制与联结为简直任何类型的数据系统提供了推、拉技术。它们能够有限配置、组合在一起,以桥接数据库存储解决方案。所有这些都不须要任何ETL/ELT处理程序包。PostgreSQL就是这样做的。这个地球上最快的繁多事实起源数据库是通过齐全不将数据从源零碎移出来实现的。这意味着数据始终是最新的,并且能够治理响应工夫。如果您无法忍受源零碎的不可靠性,或者心愿在查问端取得更好的性能,您还能够应用物化视图定期缓存数据,这些视图能够在查问时进行更新。译者注:推手是太极术语,本地引入目标是形容数据的推送和拉取。 许可证是凋谢的PostgreSQL有本人的许可证,次要基于BSD许可证。这容许更大的应用和散发自在。该许可证实用于次要我的项目的所有代码,次要奉献扩大,客户端库,连贯管理器以及大多数相干工具。它是高度宽容的,原文许可形容中,并不波及可供购买。 很棒的文档PostgreSQL我的项目要求任何提交代码的开发人员都要提供倡议形容文档。该倡议用于创立性能的阐明,倡议文档以多种格局提供。此文档还用于评估功能模块自身,并作为将来开发功能模块的参考。总之,这意味着PostgreSQL依赖于文档。有很多PostgreSQL的开发人员曾经学会了用C语言编码,数据库是如何工作的,以及如何治理PostgreSQL我的项目。这份文件是名列前茅的。 测试驱动开发PostgreSQL通过了宽泛、详尽的测试。每个谬误都会通过测试来验证其存在,并编写代码来满足该测试。首先通过创立测试(和文档)来编写新性能,而后对其进行编码,直到实现该性能为止。这些测试已集成到组建场中进行回归,因而bug不会(从新)呈现在PostgreSQL的将来版本中。这意味着在每个构建周期中,将为每个版本的PostgreSQL运行每个测试(以后测试)。这是大量的测试,它确保PostgreSQL依然是可用的最稳固的数据库。PostgreSQL仅在所有回归测试通过后才公布。这提供了“ 0个已知谬误”版本。 国际化和本地化PostgreSQL的开发人员来自世界各地。自PostgreSQL成为大学毕业生我的项目以来,他们就始终在应用多种本地语言工作。国际化和本地化曾经成为PostgreSQL的规范做法,而PostgreSQL不再是吸引寰球商业市场的一个螺钉。只管PostgreSQL出于兼容性起因将某些国际化委托给操作系统,但许多翻译都嵌入到零碎中,从而提供了无缝的语言过渡体验。 云端作业PostgreSQL在云架构中应用ansible、kubernetes和来自多个云供应商的专有工具。有几种本地云实现可供选择,以匹配您的架构。如果您想像牛而不是宠物那样看待服务器,PostgreSQL也为您提供了云服务。 符合标准PostgreSQL在我的项目的整个生命周期内始终是规范的。因为PostgreSQL起源于大学的研究生课程,因而它已被用作许多SQL规范的参考实现。PostgreSQL实现了SQL/Med和ANSI SQL。依据杰出的文档形容,“ PostgreSQL反对SQL:2016的大部分次要性能。残缺的外围一致性须要179个强制性的个性,PostgreSQL至多合乎160个。这简直超过了任何其余数据库引擎。 语言性能PostgreSQL实现了公共表表达式(CTE)、语言控制结构(if、for、case等)、结构化错误处理,以及您冀望从成熟过程语言中取得的所有益处。 您服气了吗?我依然能够议论用户组、IRC频道、有解决方案的网站、博客文章和导师的微妙社区。对于数据库是跨平台、跨体系结构和跨文化的,我能够从哲学的角度进行论述。有无数个小时的演讲、视频和讲座。或者,您能够间接下载它,看看它是否超出您的设想。我想您会感到十分惊喜。 更多精彩内容,请关注以下平台、网站: 中国Postgre SQL分会官网公众号(技术文章、技术流动):开源软件联盟PostgreSQL分会 中国Postgre SQL分会技术问答社区:www.pgfans.cn 中国Postgre SQL分会官方网站:www.postgresqlchina.com

August 28, 2020 · 1 min · jiezi

关于postgresql:PostgreSQL学习的九层宝塔

前言武侠世界,9是个神奇的数字,武学秘籍有《九阳真经》《九阴真经》,凡文治修炼到第九层,闯荡江湖将独孤求败,快意恩仇。以文昌塔为喻,我把学习PG划分九层,心愿能够对玩转数据江湖的同学,有所参照,逐层递进,直至达到高手行列,闯荡职场,熟能生巧。第一层 初识 PG,宽阔心怀。第二层 装置应用,入手操练。第三层 相熟性能,提纲挈领。第四层 纯熟操作,得心应手。第五层 透视性能,探索原理。第六层 问题解决,性能优化。第七层 读懂源码,疾速定位。第八层 编写源码,欠缺优化。第九层 死记硬背,自在驰骋。 第一层:初识PG,宽阔心怀数据库不只有Oracle、DB2、SQLSERVER,还有PostgreSQL(简称PG),PG是最弱小的开源数据库,PG开源敌对,学习PG能够从事DBA/利用开发/零碎内核开发等工作,而且会有很大的施展空间,应用PG能够为企业提供无效的数据库治理,也能够自主可控、节约老本。当今职场,多懂几个数据库,会让咱们有更多的机会。 初识PG,次要是学习认知PG的起源倒退,次要版本个性,应用领域;理解国内PG社区组织、资源、动静,与中国PG分会、PG社区建立联系,踊跃互动,获取学习资源,尝试分享,展现自我。 第二层:装置应用,入手操练“装置部署、服务治理、体系结构、初始化配置、数据库对象治理”,这是PG的利用治理根底,DBA要会,利用开发也要会。当然两种角色关注重点稍有不同,譬如DBA关注架构部署、运行稳定性和高效性,而利用开发更多的是把握数据库对象的创立及治理。 第三层:把握要点,提纲挈领PG作为关系型数据库承当着治理企业数据的重任。性能、性能很重要,稳定性更重要,这也是作为DBA首要思考的问题。PG数据库倒退30多年,国内、国内的泛滥利用案例表明稳定性可以信赖。关注学习与稳定性相干的知识点,可能将PG的稳定性施展的更好: PG稳定性要点:内存配置日志配置磁盘治理并发管制过程管制…… PG的功能强大、繁多,能够系统化、模块化的选择性学习。譬如PG有地理信息数据处理性能(GIS),临时用不到能够先放过,除非很有志趣。DBA和利用开发人员能够依据工作须要深刻学习不同性能要点。 PG性能列表:安全控制基准测试监控性能审计性能并发管制并行处理长期表触发器函数、存储过程执行打算物理连贯数据缓存物化视图分区表主从流复制逻辑复制拜访内部数据…… 第四层:纯熟操作,得心应手学习了稳定性要点、性能列表后,PG根本能够用来服务于工作了。通过一直的自我练习,满足工作业务需要,会看到本人的程度会一直的提高。 第五层:透视性能,探索原理PG性能点繁多,独特的性能实用于不同的业务场景,而且随着PG版本的更新迭代,重要的性能点也会一直失去优化,无论是应用上的便捷性还是性能的加强,无不体现着源码内核奉献着的智慧与谋求:使PG不断完善,更好的服务于业务。 譬如分区表,PG V9版本中是通过表继承+触发器的形式实现,因触发器自身的限度,数据的插入性能并不高;PG V10实现了内置分区表,创立的分区本质上也是一般的表构造,从而治理分区不便,数据插入效率得以进步;PG V11减少哈希分区、默认分区、反对更新分区键等,欠缺了分区的性能。 探索原理能从外部机理深刻了解,面对问题也能透过景象看实质,发现问题的诱因是使用不当还是零碎bug,从而能更好的解决问题。 第六层:问题解决,性能优化习得第五层是为了更好的应用PG,遇到问题能够疾速定位、剖析解决。解决问题须要平时多积攒整顿,一方面是技术群、网站论坛抛出的问题,被动思考、整顿,学习总结,以备不时之需,有些问题平时不常常遇到,但一旦呈现,之前没有解决过会比拟辣手;另一方面是工作中的问题,通常会有应急解决方法,问题解决后,尽量造成问题剖析报告,对有些问题抉择深度思考、探讨,探索根本原因,进而归档或分享,这都是贵重的教训。 性能优化始终是数据库大脑的重点,也是运维、开发者工作价值的体现。通过对底细的摸索,可能拨云见日,配合相干工具通过配置或SQL的优化,来晋升数据库的拜访性能。 第七层:读懂源码,疾速定位大学计算机相关业余的同学,个别会有C语言的课程,C语言能够算是世界上最平凡的编程语言之一,能够用来编写UNIX/Linux的内核,也能够实现Python/Ruby解析器、Apache中间件等,很多关系数据库都能看到C语言的影子。 PG源代码也是用C编写,尝试学习源码是件有挑战性的事,就如同驾驶手动挡汽车,如能操作纯熟,必能领会其中的乐趣。不必任何解读,就能疾速定位到源代码间接了解PG的工作逻辑,帮忙咱们更好的应用PG。 第八层:编写源码,欠缺优化编写PG源码是有志于从事零碎编程工作同学的谋求或方向,PG的弱小凝聚了世界各地PG内核编码工程师的智慧,遗憾的是,PG国内社区的贡献者档案中还没有呈现中国人的名字。当然,国内也不乏优良的零碎编码者,期待通过大家独特的致力,将会涌现更多、更优良的零碎编码工程师呈现在列表中! PG国内社区贡献者列表链接:https://www.postgresql.org/community/contributors/ 第九层:死记硬背,自在驰聘学习任何技能,最终的境界是融汇贯通,以无招胜有招。无论大家从事DBA、DEV或者零碎内核开发,通过无效的办法,坚定不移的积攒都能够达到这一层,自在挥洒。 后记以上内容只是在PG的学习角度做的一些总结,用好PG还须要有良好的零碎、数据库原理常识,这也是根底,犹如地基,地基稳,宝塔立。PG学习的九层宝塔,是为了更形象具体的形容,学习过程不是说必须按此一层一层进行,大家能够依据本人趣味或工作须要有所抉择的发展学习。 最初,说两点学习的办法领会:第一:多交换、多浏览、多练习。多与前辈交换,迷信问答,多浏览优良书籍,本人多做试验。书是人类提高的阶梯,学习最好的搭档,能够依据学习阶段或工作须要抉择浏览。 参考书目《PostgreSQL修炼之道-从小工到专家》《PostgreSQL实战》《PostgreSQL指南:底细摸索》《PostgreSQL服务器编程》…… 第二:投资学习,向导师借力。培训是件业余的事,优良的培训导师能够帮你疾速把握要领、修改办法;帮你节约工夫、能更疾速无效的晋升技能;还可能提供更多的资源,譬如良好的学习环境、就业机会、技术支持等,人生多一良师,也是一大幸事。 读罢本文,想必有读者会问我是几层,我只能这么答复您“路漫漫其修远兮,吾将上下而求索”。如果本文对您有所帮忙,也不枉费脑力一场;如果您有不同意见也能够借PG分会平台发表或进一步交换。 更多精彩内容,请关注以下平台、网站: 中国Postgre SQL分会官网公众号(技术文章、技术流动):开源软件联盟PostgreSQL分会 中国Postgre SQL分会技术问答社区:www.pgfans.cn 中国Postgre SQL分会官方网站:www.postgresqlchina.com

August 26, 2020 · 1 min · jiezi

关于postgresql:Postgres是最好的开源软件

作者:布鲁斯·摩坚(Bruce Momjian)Bruce Momjian是PostgreSQL寰球开发小组的联结创始人和外围团队成员,从1996年开始从事PostgreSQL。他从2006年开始在EnterpriseDB任职,现任EDB副总裁。 PostgreSQL的泛在与专制泛在和专制是最能形容开源PostgreSQL(Postgres)数据库管理系统的两个词。而且,就像Linux一样,两者都是“最佳状态下开源”的绝佳示例。 就其普遍性而言,Postgres已有30多年的历史了,现在寰球各地都能够在本地运行或作为托管(云)服务从数十个提供商处取得。咱们常常听到它是开发人员最常抉择的“首选” API。依据Stack Overflow的考察,如果你问开发人员他们最喜爱哪种数据库技术,Postgres排在第二位,仅次于Redis。 而且,在专制方面,该软件我的项目由PostgreSQL寰球开发小组治理,他们是来自世界各地的开发人员和志愿者。软件我的项目有500多个贡献者。没有一个公司负责、摆布或管制我的项目和软件开发,因而不存在依赖任何集体或实体的危险。此外,任何人都不可能“接管”Postgres。PostgreSQL寰球开发小组始终致力于使PostgreSQL永远成为收费和开源的软件。从没有打算更改PostgreSQL许可证或以其余许可证来公布。 在2017年和2018年,Postgres被 DB-Engines评为“年度最佳数据库”,其取得的知名度超过了343个受监督的其它零碎。DB-Engines写道:Postgres处于其遍及水平的巅峰期间,在沉闷的社区中丝毫没有苍老的迹象。PostgreSQL通过各种形式很好地满足了古代DBMS的要求。基于牢靠的RDBMS实现,它通过反对JSON数据类型和各种运算符扩大了利用的范畴,从而为原本会转向文档存储的我的项目提供了强有吸引力的抉择。在最新版本中,它正专一于进一步提高性能。 泛在和专制=自在开源(尤其是数据管理技术)被云提供商所采纳,始终存在很多争执,特地是像Amazon Web Services(AWS)这样的巨头。为了保卫本人的地盘,MongoDB等公司扭转了许可条款,以抵制AWS等公司。 就Postgres而言,这种抵制根本是不可能的。治理Postgres的普遍性和民主化,对每个参加的人来说都享有平等的自在。用户在数据中心能够抉择开源PostgreSQL或企业版Postgres,能够与曾经抉择的任何云服务一起运行。没有限度–这就是让Postgres与其余所有都不一样的起因。 更多精彩内容,请关注以下平台、网站: 中国Postgre SQL分会官网公众号(技术文章、技术流动):开源软件联盟PostgreSQL分会 中国Postgre SQL分会技术问答社区:www.pgfans.cn 中国Postgre SQL分会官方网站:www.postgresqlchina.com

August 25, 2020 · 1 min · jiezi

关于postgresql:Docker受美方管制我们能做些什么

国际贸易摩擦一直,现已波及开源软件的倒退,特地是受美帝管控的优良开源软件,一直有新闻报道其受到多种倒退限度,大有技术制裁的架势,譬如最近Docker禁止被列入美国“实体名单”的国家、企业、集体应用的新闻和之前的美国对开源我的项目进口管制的报道都在开释这种信号。 开源软件是技术从业者共享精力的结晶,能够说是全人类独特的财产。但世界的倒退素来没有进行过以强欺弱的事件产生。历史的教训总会为咱们敲响警钟。更多的优良软件如果“断供”了,咱们应该怎么办? 这里问题聚焦在:什么是断供,开源软件也会断供吗? 我了解面向开源软件的断供,次要是指开源软件的版权所有者受美方政府影响,更新、优化的新版本代码不再向咱们凋谢,咱们不能轻易的取得应用。 其中有两方面外延: 一方面是开源软件是有所区别的,不是所有开源软件版权所有者都受到美方政府干预,譬如PostgreSQL,它的次要版权属于国内社区开发小组,小组的次要成员又扩散在世界各地,所以美方政府根本管不着。 另一方面这里的“断供”,次要面向软件新版本、新个性,咱们除了施展好“拿来主义”,更重要是如何基于对开源源代码的学习、钻研,晋升咱们本人的本事,研发更优良、更能满足咱们业务场景的软件,这是基本。 而且,咱们同样也有襟怀凋谢优良源代码,向世界展现国人的实力。当今国内曾经涌现了很多顶尖技术人才在github、gitee平台上凋谢他们的智慧结晶、优秀作品,这定会博得世人的关注和尊重。感兴趣的读者能够参考下图,理解更多优良的中国开源软件。用一句话来概括:师夷长技以自强,国人有能力、有信念面向世界倒退咱们弱小的开源软件。图片起源:https://www.oschina.net/proje..._cn_2019 开源软件波及泛滥畛域,很多畛域仍需建设、倒退迷信业余的开源社区组织、独立可控的软件开发、治理平台,组织有能力的编码者协同开发,招集更多的人参加开源奉献能力使中国开源软件倒退越来越弱小。 根底软件倒退更是如此,须要更多国人的参加、业余组织的引领,弱小平台的撑持! 目前,由中国PostgreSQL分会组织建设了postgreshub.cn资源平台,心愿通过平台能够使PostgreSQL在国内可能独立、衰弱、可继续倒退。在此通过问答的形式向大家介绍一下: 1.postgreshub.cn是什么?postgreshub.cn是由中国PG分会继pgfans.cn之后,组织筹建的PostgreSQL资源核心,简称“PG资源网”或“PGHub资源网”,在这里您能不便的获取更多与PostgreSQL相干的资源,同时也能够分享您的资源,目前平台次要提供资源下载性能,后续会上线更多功能。 2.postgreshub.cn都有哪些资源?PGHub次要包含Postgres国内开源版本分支、国产化服务器兼容PG安装包、PG工具库/插件库、PG会议流动材料、PG学习材料、PG内核开发者协同等内容。 3.PG国内开源版本库是什么?PG国内开源版本库次要是由国内的开发者或组织基于PG最新版本公布的独立版本,在保留PG原生版本性能个性的同时,优化了已有性能或增加了新的性能供大家下载应用(并提供了详实的文档);咱们激励每个有能力的开发者或组织可能基于PG国内版本分支增加更多功能回馈社区,从而一直晋升咱们对外围代码的掌控力。 4.Postgreshub.cn的专区栏目是做什么用的?PGHub专区是PG分会联结次要企业成员瀚高软件应国产服务器联合开源数据库实现业务数据管理的诉求,提供了能够在国产服务器平台间接装置的PostgreSQL 12软件包。解决了国产服务器和开源PG兼容性的问题,并为大家提供了详实的装置文档,助力企业能够应用国产化服务器和开源PostgreSQL版本无效降低成本的同时解脱对国外商业数据库的依赖。如果您在应用中有任何问题,也能够通过平台联系方式帮您解答。 5.国产化服务器上安装应用PostgreSQL有什么劣势?国产化服务器次要集成了国内自主研发的芯片,有人造的平安劣势和肯定的老本劣势,PostgreSQL是自由软件,遵循BSD协定,是开源软件最自在的代表,不仅有弱小性能、稳定性撑持,而且还有除国内社区之外的国内泛滥业余数据库厂商的技术支持,提供欠缺的高可用架构解决方案和迁徙、维保服务,解除您的后顾之忧。 大家如何参加postgreshub.cn?PGHub次要提供了资源(国内PG开源版本分支、专区安装包、PG工具/插件、流动材料等)的下载,后续大家能够自主上传PG相干资源,发挥分享精力,促成PG在国内的倒退,让国内用户更好的应用PostgreSQL。激励有能力的集体开发者参加PG国内开源分支的版本迭代;参加工具、插件的开发和上传,展示自我价值。 PostgreSQL的版本迭代始终由国内社区引领,虽体系欠缺,但国内开发者参加性能提交周期会漫长且不容易被采纳,国内又短少独立的版本运作平台和机制,PG分会打算借助资源网的开发者栏目来疏导有能力的开发者参加PostgrSQL的开发,同时发现、造就更多的内核开发人才。具体参加流程可参考PGHub的开发者栏目。 如果有问题怎么办?如果您在应用postgreshub.cn 过程中有任何问题或倡议,欢迎您发邮件(partner@postgresqlchina.com)给咱们,咱们会依据您的问题或倡议尽快的做出调整和优化。 最初,心愿咱们的致力能够给大家带去一些帮忙,更心愿可能失去大家反对和反馈,如果您觉着这个网站不错,能够珍藏或推介给您的敌人,让咱们携手独特推动PostgreSQL在国内更好的倒退! 更多精彩内容,请关注以下平台、网站: 中国Postgre SQL分会官网公众号(技术文章、技术流动):开源软件联盟PostgreSQL分会 中国Postgre SQL分会技术问答社区:www.pgfans.cn 中国Postgre SQL分会官方网站:www.postgresqlchina.com

August 24, 2020 · 1 min · jiezi

关于postgresql:生于平凡-归于伟大

在岁月的长河中,在时代的号召下。一个小小的民间组织正悄悄地萌发发芽,逐步茁壮成长起来,这就是咱们的组织:中国开源软件推动联盟PostgreSQL分会,一个专项于晋升PG在中国影响力,促成PG产业生态倒退的民间组织。 前途尽管迷茫,拂晓终将破晓。小小的组织,散发着微小的光辉。没错,这就是分会,一个凋谢的组织。中国工程院院士---倪光南说过:“开源是一种商业模式,适宜于中国。这些年来,中国软件界正沿着使用者 —— 赞美者 —— 共享者的路线,一直减少其在世界开源软件界的奉献和话语权。”而PostgreSQL数据库恰好投合了这一点,这是分会的使命,更是分会的责任,接下来咱们就隆重介绍一下咱们的组织中国开源软件推动联盟PostgreSQL分会: 中国开源软件推动联盟(英文全称:China OSS Promotion Union,英文缩写:COPU,以下简称"开源联盟")于2004年在北京成立。是受工信部中国电子信息产业倒退研究院领导,以进步中国开源软件倒退和利用程度为主旨,致力于构建开源软件产业生态、推动开源软件产学研用倒退的行业协会组织。中国开源软件推动联盟PostgreSQL分会(简称“中国PG分会”)于2017年成立,是PostgreSQL数据库作为开源联盟重点倒退和反对对象所产出的重要成绩。作为国内惟一官网认可的PG行业组织,分会承当着在国内推广和倒退PostgreSQL技术的职能。 PostgreSQL是最弱小的企业级开源数据库,采纳BSD开源协定,是学术性开源技术,PostgreSQL主体不受任何国家,机构,企业及商业组织管制与主导。PostgreSQL的倒退与治理全副由PostgreSQL国内开源社区把握。中国PG分会作为国内惟一的具备独立法人主体的PG行业协会组织,承当着推广PG技术和倒退PG产业生态的主体作用。 PostgreSQL是世界支流的开源关系型数据库。基于PostgreSQL数据库的影响以及国内数据库技术的倒退现状,为推动国内PostgreSQL产业生态建设和产学研用倒退,增强国内开源技术建设和利用,加深对国内支流数据库的了解,在工业和信息化部赛迪研究院(中国电子信息产业倒退研究院)的领导下,依靠中国开源软件推动联盟,特成立PostgreSQL分会,作为实体运作组织。(官网:www.postgresqlchina.com) 晋升PG在中国影响力,促成PG产业生态倒退。建设将来,迫不及待,咱们在这里! 更多精彩内容,请关注以下平台、网站: 中国Postgre SQL分会官网公众号(技术文章、技术流动): 开源软件联盟PostgreSQL分会 中国Postgre SQL分会技术问答社区: www.pgfans.cn 中国Postgre SQL分会官方网站: www.postgresqlchina.com

August 11, 2020 · 1 min · jiezi

关于postgresql:PostgreSQL开源界的活雷锋

作为开源数据库的杰出代表,PostgreSQL始终被誉为开源界的“活雷锋”。这个“活雷锋”到底是如何贡献本人照亮别人,又是为什么会有如此高的境界与觉醒呢?当初就让咱们一起来揭开开源界这位“活雷锋”神秘面纱。 PostgreSQL许可是一种自在的开源许可证,与BSD或MIT许可证相似。1994年之前的局部版权属于加利福尼亚大学董事会;1996年-2020年,局部版权属于PostgreSQL寰球开发小组;寰球开发小组成员扩散在世界各地,其背地不受任何公司实体管制,这使其成为一个真正的凋谢我的项目。 BSD许可证激励代码共享,但须要尊重代码作者的著作权。BSD许可证因为容许使用者批改和从新公布代码,也容许应用或在BSD代码上开发商业软件公布和销售,因而是对商业集成很敌对的许可证/协定。很多的公司在选用开源产品的时候都首先思考BSD许可证/协定的开源产品,因为能够齐全管制这些第三方的代码,在必要的时候能够批改或者二次开发。 听完这些,“活雷锋”的面纱曾经不再神秘,正是凭借着自在与灵便的许可证/协定,PostgreSQL数据库广为人知,并且在开源数据库排名中也位列最前端. 最最重要的是这么优良的数据库管理软件PostgreSQL在应用时是完全免费的,而且还有社区的技术支持。 更多内容,敬请关注以下平台、网站: 中国Postgre SQL分会官网公众号(技术文章、技术流动):开源软件联盟PostgreSQL分会 中国Postgre SQL分会技术问答社区:www.pgfans.cn 中国Postgre SQL分会官方网站:www.postgresqlchina.com

July 22, 2020 · 1 min · jiezi

PostgreSQL主从部署

环境描述自行下载rpm包本地安装或者wget创建PostgreSQL的源文件。本次记录为内网服务器,rpm本地安装,版本为PostgreSQL-9.6,经测试,9.6主从流复制可切换,9.4测试未果。 位于/share/rpms/psql-need/目录下。 机器规划Master server 系统版本机器配置主机名IPCentOS Linux release 7.4.170848C/256G/33TBBus-App-21190.176.35.170CentOS Linux release 7.4.170848C/256G/33TBBus-App-22190.176.35.171Master Server以下命令在rpm包目录下执行。 # yum install ./postgresql96\*# mkdir -p /data/pgsql-9.6/archive# chown postgres.postgres /data/pgsql-9.6# chmod 0700 /data/pgsql-9.6# vim /usr/lib/systemd/system/postgresql-9.6.serviceEnvironment=pgsql-9.6=/data/pgsql-9.6/# /usr/pgsql-9.6/bin/initdb -D /data/pgsql-9.6# systemctl enable postgresql-9.6# systemctl start postgresq-9.6# passwd postgres# su postgres$ psql –U postgres=$ alter user postgres with password ‘Ur passwd’;=$\q# vim /data/pgsql-9.6/postgresql.conflisten_addresses = '*'max_connections = 500superuser_reserved_connections = 5shared_buffers = 128MBdynamic_shared_memory_type = posixwal_level = hot_standbysynchronous_commit = localarchive_mode = onarchive_command = 'cp %p /data/pgsql-9.6/archive/%f'max_wal_senders = 5# vim /data/pgsql-9.6/pg_hba.confhost    replication     postgres        127.0.0.1/32              md5host    replication     postgres        190.176.35.0/24                 md5# systemctl restart postgresql-9.6Slave Server以下命令在rpm目录下执行。 ...

June 17, 2020 · 4 min · jiezi

postgresql安装postgis扩展模块

为postgresql安装postgis扩展模块: 1、安装postgis2、在指定数据库下执行下面语句 CREATE EXTENSION postgis3、验证:执行下面语句不报错即可 SELECT ST_SetSRID(ST_Point(-87.71,43.741),4326),ST_GeomFromText('POINT(-87.71 43.741)',4326)

June 8, 2020 · 1 min · jiezi

HAWQoracle兼容函数orafunc

参考https://docs.oracle.com/en/database/oracle/oracle-database/18/sqlrf/ABS.html#GUID-D8D3489A-44EA-4FEC-A6F0-B5E312FFC231测试的软件版本PostgreSQL 8.2.15 (OushuDB 3.4.0.0) (Apache HAWQ 2.4.0.0) (Greenplum Database 4.2.0 build 1) on x86_64-unknown-linux-gnu, compiled by GCC clang version 8.0.1 (tags/RELEASE_801/final) compiled on Jan 15 2020 05:46:01安装方法psql dw -f $GPHOME/share/postgresql/contrib/orafunc.sql函数功能解析名字例子功能nvlselect oracompat.nvl(NULL,'1'::text)等价PostgreSQL的SELECT coalesce(NULL,'1'::text)add_monthsselect oracompat.add_months('2020-05-25'::date,1);增加月份last_dayselect oracompat.last_day('2020-05-15'::date);返回当前日期所在月份的最后一天的当前时间next_dayselect oracompat.next_day('2020-05-01'::date,'SUNDAY');select oracompat.next_day('2020-05-01'::date,1);获得当前日期的下一个星期几的日期: SUNDAY(1), MONDAY(2), TUESDAY(3), WEDNESDAY(4), THURSDAY(5), FRIDAY(6), SATURDAY(7)months_betweenselect oracompat.months_between('2020-10-01'::date,'2020-02-01'::date)MONTHS_BETWEEN函数返回两个日期之间的月份数trunc--## 返回当前日期(YYYY-MM-DD)select oracompat.trunc(now()::date ); --## 返回当前日期(YYYY-MM-DD-HH-MI)select oracompat.trunc(now(),'MI' ); --## 返回当前日期(YYYY-MM-DD-HH) select oracompat.trunc(now(),'HH' ); --## 返回当前星期的第一天 select oracompat.trunc(now(),'D' ); --## 返回当前日期(YYYY) select oracompat.trunc(now(),'YYYY'); --## 返回当前日期(YY) select oracompat.trunc(now(),'YY' ); --## 返回当前日期(YYYY-MM) select oracompat.trunc(now(),'MM' ); --## 返回当前日期(YYYY-MM-DD) select oracompat.trunc(now(),'DD' );截断日期roundselect oracompat.round(now()::date);select oracompat.round(now(),'year');select oracompat.round(now(),'month');select oracompat.round(now(),'day');日期四舍五入函数instr--## 返回结果:3 默认第一次出现“l”的位置 select oracompat.instr('helloworld','l') ;--## 返回结果:4 即:在“lo”中,“l”开始出现的位置select oracompat.instr('helloworld','lo') ;--## 返回结果:6 即“w”开始出现的位置select oracompat.instr('helloworld','wo') ; --## 返回结果:4 也就是说:在"helloworld"的第2(e)号位置开始,查找第二次出现的“l”的位置select oracompat.instr('helloworld','l',2,2); --## 返回结果:4 也就是说:在"helloworld"的第3(l)号位置开始,查找第二次出现的“l”的位置select oracompat.instr('helloworld','l',3,2); --## 返回结果:9 也就是说:在"helloworld"的第4(l)号位置开始,查找第二次出现的“l”的位置select oracompat.instr('helloworld','l',4,2);--## 返回结果:9 也就是说:在"helloworld"的倒数第1(d)号位置开始,往回查找第一次出现的“l”的位置select oracompat.instr('helloworld','l',-1,1);--## 返回结果:4 也就是说:在"helloworld"的倒数第1(d)号位置开始,往回查找第二次出现的“l”的位置select oracompat.instr('helloworld','l',-2,2); --## 返回结果:9 也就是说:在"helloworld"的第2(e)号位置开始,查找第三次出现的“l”的位置select oracompat.instr('helloworld','l',2,3) ;--## 返回结果:3 也就是说:在"helloworld"的倒数第2(l)号位置开始,往回查找第三次出现的“l”的位置select oracompat.instr('helloworld','l',-2,3);返回要截取的字符串在源字符串中的位置格式一:instr( string1, string2 ) / instr(源字符串, 目标字符串)格式二:instr( string1, string2 [, start_position [, nth_appearance ] ] ) / instr(源字符串, 目标字符串, 起始位置, 匹配序号)reverseselect oracompat.reverse(123456) ;select oracompat.reverse('人生几何对酒当歌');select oracompat.reverse('123456',3,5);将一个对象反向转换;针对数据库内部存储的对象编码进行反转的concatselect oracompat.concat('aa','1.23'::float);select oracompat.concat('aa','bb');连接两个字符串NANVLselect oracompat.nanvl('1.23',1);select oracompat.nanvl('NaN',1);select oracompat.nanvl('nan',1);[ select nanvl(a2,a1) ] ;NANVL函数仅对BINARY_FLOAT或BINARY_DOUBLE类型的浮点数有用。如果输入值n2是NaN(不是数字),它指示Oracle数据库返回一个可选值n1。如果n2不是NaN,则Oracle返回n2。BITANDSELECT oracompat.BITAND(6,3);两个数值型数值在按位进行AND运算;等价PostgreSQL的select 6 & 3;listagg1_transfn--listagg2_transfn--NVL2select oracompat.nvl2(NULL,'y'::text,'n'::text);select oracompat.nvl2('','y'::text,'n'::text);select oracompat.nvl2('1','y'::text,'n'::text);nvl2()(E1, E2, E3)的功能为:如果E1为NULL,则函数返回E3,若E1不为null,则返回E2LNNVL--DUMPselect oracompat.dump('Tech');select oracompat.dump('Tech', 10) ;select oracompat.dump('Tech', 16) ;返回一个varchar2值,这个值包含了数据类型代码、字节长度和表达式的内部表示形式https://wiki.imooc.com/oracle...NLSSORTSELECT FROM test ORDER BY oracompat.NLSSORT(name,'zh_CN.utf8');SELECT FROM test ORDER BY oracompat.NLSSORT(name,'en_US.utf8');SELECT * FROM test ORDER BY oracompat.NLSSORT(name,'zh_CN.gb18030');NLSSORT返回字符值char的排序规则键和显式或隐式指定的排序规则。排序规则键是一个用于根据指定的排序规则对char进行排序的字节字符串。排序规则键的属性是:按二进制比较由给定的排序规则生成的两个排序键的相互排序和按给定的排序规则比较源字符值的相互排序相同SUBSTRSELECT oracompat.substr('ABCDEFG',0,3) ;SELECT oracompat.substr('ABCDEFG',1,3) ;SELECT oracompat.substr('ABCDEFG',2,3) ;SELECT oracompat.substr('ABCDEFG',-1,3);取得字符串中指定起始位置和长度的字符串

June 1, 2020 · 1 min · jiezi

HAWQ外部表

测试的软件版本PostgreSQL 8.2.15 (OushuDB 3.4.0.0) (Apache HAWQ 2.4.0.0) (Greenplum Database 4.2.0 build 1) on x86_64-unknown-linux-gnu, compiled by GCC clang version 8.0.1 (tags/RELEASE_801/final) compiled on Jan 15 2020 05:46:01语法DB=# \h CREATE EXTERNAL TABLE规范命名规范ext_XXXXXXerr_XXXXXXerr表需要定期清理建议做成存储过程定期清理建立gpfdist外部表启动gpfdist服务nohup gpfdist -d /home/gpadmin -p 8888 > gpfdist.log 2>&1 &检查gpfdist服务是否存在-bash-4.2$ ps -ef | grep gpfdistgpadmin 507192 493162 0 01:57 pts/0 00:00:00 gpfdist -d /home/gpadmin -p 8888建立可写gpfdist外部表create writable external table ext_w_test001( id bigint, name varchar(128) ) location('gpfdist://10.0.0.6:8888/gpextdata/test001.txt') format 'csv' encoding 'GB18030';可写测试insert into ext_w_test001 select generate_series(1,1000,1),1;# 插入数据后登陆服务器10.0.0.6执行下列shell指令 wc -l /home/gpadmin/gpextdata/test001.txt建立可写gpfdist外部表create readable external table ext_r_test001( id bigint, name varchar(128)) location('gpfdist://10.0.0.6:8888/gpextdata/test001.txt') format 'csv' encoding 'GB18030'log errors into err_r_test001segment reject limit 10 rows;可读测试select count(*) from ext_r_test001;select * from ext_r_test001 limit 5;删除gpfdist外部表找出对应的外部表和err表方案一 External table "public.ext_w_test001" Column | Type | Modifiers --------+------------------------+----------- id | bigint | name | character varying(128) | Type: writableEncoding: GB18030Format type: csvFormat options: delimiter ',' null '' escape '"' quote '"'External location: gpfdist://10.0.0.6:8888/gpextdata/test001.txtDistributed randomlydw=# \d ext_r_test001 External table "public.ext_r_test001" Column | Type | Modifiers --------+------------------------+----------- id | bigint | name | character varying(128) | Type: readableEncoding: GB18030Format type: csvFormat options: delimiter ',' null '' escape '"' quote '"'External location: gpfdist://10.0.0.6:8888/gpextdata/test001.txtSegment reject limit: 10 rowsError table: err_r_test001方案二SELECT x.location, x.fmttype, x.fmtopts, x.command, x.rejectlimit, x.rejectlimittype, x.writable, (SELECT relname FROM pg_class WHERE Oid=x.fmterrtbl) AS errtblname, pg_catalog.pg_encoding_to_char(x.encoding),x.fmterrtbl = x.reloid AS errortofile FROM pg_catalog.pg_exttable x, pg_catalog.pg_class c WHERE x.reloid = c.oid AND c.oid = 'public.ext_r_test001'::regclass;删除外部表(删除之前查看建表语法有没有错误表存在)drop table err_r_test001;drop external table public.ext_r_test001;drop external table public.ext_w_test001;关闭gpfdist服务ps -ef | grep gpfdist | grep -v grep | awk '{print $2}' | xargs killps -ef | grep gpfdist建立web外部表...待更新 ...

May 26, 2020 · 2 min · jiezi

深度融合POLARDB与SuperMap联合构建首个云原生时空平台

10月30日,以“地理智慧 深度进化”为主题的2019 GIS软件技术大会(简称GTC 2019)在北京国际会议中心开幕。超图联合阿里云在主论坛完成产品合作发布。超图软件SuperMap GIS与阿里巴巴新一代自研云数据库POLARDB实现 “引擎级”深度对接,构建了自治、弹性、高可用的云原生时空数据管理平台联合解决方案,推出了业界首个“云原生数据库+云原生GIS”的全国产化平台。 阿里云POLARDB POLARDB是阿里云自主研发的国内首个云原生数据库,兼容三种数据库引擎:MySQL、PostgreSQL、Oracle。采用了存储计算分离、软硬一体化等创新设计,满足大规模业务场景上云需求。POLARDB集成Ganos时空引擎,基于属性-时间-空间一体化数据管理、4D移动对象建模以及空间异构计算并行加速构建时空PaaS基础服务。 超图SuperMap GIS SuperMap GIS是北京超图软件股份有限公司研发的,具有完全自主知识产权的大型地理信息系统软件平台。最新推出的SuperMap GIS 10i产品构建形成大数据GIS、人工智能GIS、新型三维GIS、云原生GIS和跨平台GIS“BitCC”五大技术体系。在GIS基础软件领域的中国市场份额稳居第一,用户遍布100多个国家和地区。 1+3+N联合方案 双方联合开发的云原生时空数据管理平台包含1+3+N布局: 1:统一云原生数据库和云原生GIS,完成近600个GIS标准案例库严格测试,获得双方兼容性认证,为用户构建自治、弹性、高可用的云原生时空大数据管理平台提供了强有力的基础软件平台支撑。3:三个重磅特性:a. 支持全空间建模与时空多模,可综合管理地表地下、室内室外、空/天以及时空各类地物对象;b. 独具一库多平台兼容性,平台高度兼容Oracle和PostgreSQL,而GIS空间数据同时兼容Ganos和SuperMap接口访问,已有应用程序均可平滑迁移;c. 双引擎融合性能加速,SuperMap空间数据引擎与Ganos时空引擎通过深度融合获得极致性能提升。N:多形态输出:支持公有云和私有IDC环境部署,其中IDC支持专有云、纯软许可或POLARDB BOX一体机方式输出,充分满足安全合规需求。 不一样:“引擎级”深度对接 为提升GIS平台在千万以及亿级空间记录下的查询分析性能,此次双方平台的对接采用了“计算下推”的深度融合模式。SuperMap GIS平台的空间数据引擎SDX+将空间查询和分析计算直接下推到POLARDB, POLARDB利用空间并行查询优化以及云原生时空引擎Ganos的调度,实现模型的高效映射、空间索引快速过滤以及近百个查询分析的计算下推。经某时空信息云平台实际应用环境验证,较传统商用数据库对接方式有成倍的性能提升。 结语 POLARDB与SuperMap的深度融合,践行了阿里云的被集成战略,顺应了“一横一竖”的平台策略。通过“一竖”完成垂直整合,即SuperMap借助技术集成POLARDB提升了系统整体性能和跨数据库平台兼容性,而POLARDB借助SuperMap拓宽了空间业务能力宽度。一横是通过品牌叠加,共同打造了时空数据服务的平台生态,为联合开拓数字政府、城市大脑、智慧城市/园区/建筑等强GIS数字化领域应用提供了地上地下、室内室外领先、专业的全空间数字化解决方案能力。 “一横一竖”整合,扩大了空间数据服务的“面积”。 阿里云双11领亿元补贴,拼手气抽iPhone 11 Pro、卫衣等好礼,点此参与:http://t.cn/Ai1hLLJT 本文作者:ganos 阅读原文 本文为云栖社区原创内容,未经允许不得转载。

November 4, 2019 · 1 min · jiezi

小白科普悲观锁和乐观锁

转自:码农翻身(微信号:coderising) 1、无锁旺财和小强生活在一个网上商城的系统中, 是一对儿线程好基友。 星期一刚上班,旺财接到领导电话说,要把一个商品的库存减少20, 旺财不敢怠慢,赶快把库存取出来一看,哦,现在有1000个。 与此同时,小强也接到电话说要把同一商品的库存减少30, 他一看,哦,现在有1000个。 旺财计算出最新的库存值980, 保存! 小强也计算出最新的库存值970, 保存 ! 旺财的数据被小强覆盖了! 领导一看,本来卖出了50个商品,现在库存只扣了30个,这样持续下去就天下大乱了。 旺财和小强, 各打二十大板, 长长记性! 2、悲观锁小强说:“哥,要不我们还是想个办法吧,再这样下去要被打死的。” 旺财悲催地说: “这样, 以后我们每次访问库存之前,都要先加锁,加了锁,就禁止别人再进入访问,只能等待持有锁的人来释放。” 星期二, 领导让旺财再次把库存减少20 , 旺财这次万分小心,先把库存给锁住,然后慢慢修改。 小强也接到了把库存减少的指令, 但是旺财哥已经把库存锁住了, 不能操作,小强只好去阻塞车间喝茶聊天,然后到就绪车间等待调度运行。 好不容易等到可以再次执行了,小强一看,这库存怎么还锁着呢!? 只好再次去阻塞车间喝茶。 领导一看, 小强你怎么回事, 老是喝茶聊天? ! 还干不干活了? 小强争辩说旺财哥一直锁着库存,我没法操作。 领导不管这些, 把小强和旺财又打了二十大板。 (备注: 这种加锁的方式就是悲观锁了,悲观锁正如其名,每次取读写数据时候总认为数据会被别人修改,所以将数据加锁,置于锁定状态, 不让别人再访问。缺点是如果持有锁的时间太长,其他用户需要等待很长时间。) 3、乐观锁旺财说: “兄弟,这一次哥对不住你啊,处理得慢了一些, 不过哥刚才挨打的时候想了一个好办法:乐观锁。” 小强说:“拉倒吧你,屁股都快被打烂了还乐观?” “你听我说嘛, 我们在那个库存字段的旁边,再加上一个版本(version)的字段, 例如刚开始的时候(库存= 1000, 版本=1), 每次你去读的时候不仅要读出库存,还要读出版本号, 等到你修改了库存,往回写的时候一定要检查一下版本号,看看和你读的时候是否一样。” “如果不一样呢?” 小强问 “那就放弃这次写的操作,重新读取库存和版本号, 重新来过。” “如果一样呢? ” “那就放心大胆地把新的库存值写回去。把版本号也加1” “我似乎有点明白了,我们试试,不过你要想好,我可不想再挨板子了。” 星期三, 旺财奉命把库存减去30, 他先读到了(库存= 1000, 版本=1); 小强也要改库存了,他要把库存减去50, 于是他也读到了(库存= 1000, 版本=1)。 ...

September 7, 2019 · 1 min · jiezi

使用sql获取各数据库MySQLPostgreSQLOracleMsSQL的表结构

通常我们提到数据库表结构的时候,比较关心的几个属性:字段名称、类型、长度、是否主键、是否自增、是否为空、默认值、备注。那么,使用SQL语句获取这些属性,在各主流数据库下是什么样的呢?MySQL数据库作为时下最流行的数据库,MySQL的获取SQL是最简单的。一般我们用下面一行语句就能搞定: SHOW FULL COLUMNS FROM xxx;当然,也可以用MySQL自带的数据库information_schema中的表,例如:columns等查询更全的信息。 PostgreSQL数据库使用其两个最重要的Schema(information_schema、pg_catalog)下表,进行关联查询,获取常用属性。 SELECT d.column_name AS "Field", d.udt_name AS "Type", COALESCE(d.character_maximum_length, d.numeric_precision, d.datetime_precision) AS "Length", CASE WHEN t.conname IS NOT NULL THEN 'PRI' ELSE '' END AS "Key", CASE WHEN s.extra IS NOT NULL THEN 'auto_increment' ELSE '' END "Extra", d.is_nullable AS "Null", f.adsrc AS "Default", col_description(a.attrelid, a.attnum) AS "Comment" FROM information_schema.columns d, pg_class c, pg_attribute a LEFT JOIN pg_constraint t ON (a.attrelid = t.conrelid AND t.contype = 'p' AND a.attnum = t.conkey[1]) LEFT JOIN pg_attrdef f ON (a.attrelid = f.adrelid AND a.attnum = f.adnum) LEFT JOIN (SELECT 'nextval(''' || c.relname || '''::regclass)' AS extra FROM pg_class c WHERE c.relkind = 'S') s ON f.adsrc = s.extraWHERE a.attrelid = c.oidAND a.attnum > 0AND c.relname = d.table_nameAND d.column_name = a.attnameAND c.relname = 'xxx'ORDER BY a.attnum;Oracle数据库系统表:user_col_comments能提供大部分信息,只有:备注(Comment)、主键(Key)需要关联其他表进行获取。 ...

August 28, 2019 · 2 min · jiezi

BlockLang-040-发布啦

BlockLang 源码: https://github.com/blocklanghttps://gitee.com/blocklangBlockLang 演示网址: https://blocklang.com犹如 Java 语言的 Maven,JavaScript 语言的 npmJs,Rust 语言的 Cargo 等依赖管理工具,Block Lang 0.4.0 版本也引入依赖管理功能。 Block Lang 项目依赖的对象是组件市场中注册的组件仓库。在组件市场时,我们称之为“组件仓库”;跟项目关联后,我们称之为“依赖”。 0.4.0 版本引入的依赖管理包括以下四个功能点: 创建依赖配置文件;添加一个依赖;删除一个依赖;更新依赖版本。依赖配置文件Block Lang 项目的依赖统一配置在位于项目根目录下的 DEPENDENCE.json 文件中。 依赖分为三大类: API - 对应 API 仓库开发 - 组件仓库,在开发阶段使用,是 Block Lang 设计器的扩展构建 - 组件仓库,在构建阶段使用,支持为不同的应用程序配置不同的依赖开发 和 构建 下配置的都是组件仓库,而 API 下是这些组件仓库对应的 API 仓库,因此无需直接配置。 开发 和 构建 下的依赖又按应用程序类型分组,如可以为 web 应用和微信小程序分别配置依赖。 用 json 描述的依赖结构大致如下: { "dev": { "web":{ "github/@owner1/repo1": {"git": "https://github.com/owner1/repo1.git", "tag": "v0.1.0"}, "gitee/@owner2/repo2": {"git": "https://gitee.com/owner2/repo2.git", "tag": "v0.1.0"} } }, "build": { "web":{ "default": { "github/@owner3/repo3": {"git": "", "tag": "v0.1.0"} } }, "wechatMiniApp": { "default": { "github/@owner4/repo4": {"git": "", "tag": "v0.1.0"} } } }}注意:build 分组下多了一层,名为 default,这是为后续版本预留的 Profile 功能。 ...

August 19, 2019 · 1 min · jiezi

10亿级存储挑战看一看微信广告微信支付小程序都在用的存储系统究竟是怎么扛住的

| 导语 10亿级,是微信用户的数量级。这个庞大数字的背后,是“看一看”、“微信广告”、“微信支付”、“小程序”等业务对数据库10亿级的读写需求。那么,在此场景下诞生的 FeatureKV,究竟是怎样强悍的一个存储系统呢? 背景:两个十亿级的挑战 PaxosStore 是微信内广泛应用的强一致性的分布式存储系统,它广泛支撑了微信的在线应用,峰值过亿TPS,运行在数千台服务器上,在线服务场景下性能强悍。但在软件开发中没有银弹,在面对离线产出、在线只读的数据场景,PaxosStore 面临了两个新的十亿挑战: 10亿 / 秒 的挑战: “看一看”团队需要一个存储系统来存放CTR过程需要用到的模型,实现存储和计算分离,使得推荐模型的大小不会受限于单机内存。 每次对文章的排序打分,ctrsvr 会从这个存储系统中拉取成千上万个特征,这些特征需要是相同版本的,PaxosStore 的 BatchGet 不保证相同版本。 业务方预估,这个存储系统需要支持10亿/秒的QPS,PaxosStore 的副本数是固定的,无法增加只读副本。 这个存储系统需要有版本管理和模型管理的功能,支持历史版本回退。 10亿 / 小时 的挑战: 微信内部不少团队反馈,他们需要把10亿级(也就是微信用户的数量级)信息,每天定期写到 PaxosStore 中,但 PaxosStore 的写入速度无法满足要求,有时候甚至一天都写不完,写太快还会影响现网的其他业务。 PaxosStore 是一个保证强一致性的存储系统,为在线业务设计,其性能也能满足在线业务的需求。但面对这种离线灌库、在线只读、不要求强一致性保证的场景,就需要很高的成本才能满足业务的需求了。 基于数据的应用越来越多,这类的数据存储需求也越来越多,我们需要解决这个问题,把10亿级key量的数据写入时间控制在1个小时左右。 上述场景具有定时批量写、在线只读的特点,为了解决这些场景的痛点问题,我们基于性能强大的WFS(微信自研分布式文件系统)和稳如磐石的Chubby(微信自研元数据存储),设计并实现了 FeatureKV,它是一个高性能 Key-Value 存储系统,具有以下特点: 高性能且易于扩展 优秀的读性能: 在B70机型上,全内存的表可以有千万级的QPS;在TS80A机型上,数据存放于SSD的表可以有百万级的QPS。 优秀的写性能: 在远程文件系统性能足够的情况下,可以在1小时内完成十亿个key、平均ValueSize是400Byte的数据的写入。 易于扩展: 水平扩容(读性能)和纵向扩容(容量)可以在数小时内完成,写性能扩容只是扩容一个无状态的模块(DataSvr),可以在分钟级完成。 对批量写支持友好 任务式的写接口: 支持以 WFS/HDFS 上的文件作为输入,业务方无需编写、执行灌数据工具,支持失败重试、告警。 支持增量更新/全量更新: 增量更新是在上一个版本的基础上,对一批新输入的 Key-Value 进行覆盖写,输入中没有的 key 则保持不变。而全量更新则是丢弃上一个版本的数据,灌入一批新的 Key-Value 。 支持TTL: 支持过期自动删除功能。 具有版本管理功能 事务的 BatchGet 接口: 保证一次 BatchGet 得到的数据都是同一个版本的。 支持历史版本回退: 一次更新会产生一个递增的版本,支持历史版本回退,包括增量更新生成的版本。 ...

August 7, 2019 · 4 min · jiezi

比这个夏天还要热的PostgreSQL数据库来啦

什么是PostgreSQL?云数据库 PostgreSQL 是京东云基于开源的 PostgreSQL 10.6 版本构建的一款功能强大的企业级关系型数据库管理系统。 PostgreSQL有“世界上可获得的最先进的开源数据库”之称,在过去20年的飞速发展中,该数据库已经广泛应用在GIS场景。如:移动应用、物流应用、金融数据分析等各个行业,逐渐成为企业首选商业级数据库。 云数据库可帮助您轻松在云端进行部署、操作、管理和扩展PostgreSQL,省去绝大部分复杂而繁琐的管理工作,更专注于业务流程的开发与建设。   一、产品优势云数据库PostgreSQL相比于传统关系型数据库,具有以下优势: 1、丰富性 支持多种编程语言编写存储过程和函数,可支持主流开发语言包括C/C++/Perl/Python/Java/JavaScript/PHP等,支持广泛的数据类型包括几何类型、网络地址类型、JSON类型等。更允许用户按业务需求自定义数据类型,并可灵活配置和操作。 2、灵活性 提供图形界面化的管理工具和非界面化的命令行查询工具,无论您是想通过脚本控制,还是通过控制台图形化工具操作,PostgreSQL都能满足您的需求。同时,PostgreSQL还提供一款可以整合其他数据库的管理工具,可实现多数据库之间的数据连接和迁移。 3、专业性 支持标准的SQL查询语句,支持PostGIS空间类型,支持GIS几何数据类型、范围类型、IP类型,可满足基于地理位置的空间查询、空间索引、空间分析。   二、产品架构云数据库PostgreSQL整体架构图: Service:业务逻辑层,负责处理一些业务逻辑UC:用户中心Orde:订单系统Trade:交易系统Sentinel:哨兵服务,监听实例存活情况等其他职责Manager:管理服务,执行具体的创建实例,删除实例等其他职责Container:计算服务,运行云数据库 PostgreSQL 实例SDN:SDN网络服务OSS:京东云对象存储服务JMonitor:监控服务   三、产品特性云数据库PostgreSQL作为一个合格的数据存储服务,核心满足服务高可用性和数据高可用性。 1、高可用性 京东云云数据库 PostgreSQL 采用的是本地盘的数据存储方式,所以为了保证服务的高可用性,那么必须采用集群的方式来部署云数据库 PostgreSQL 服务。 PostgreSQL 的集群方式可以是一主一从,一主两从,或者一主多从,PostgreSQL 把从称之为:Hot Standby。京东云云数据库 PostgreSQL采用一主一从模式,保证了服务高可用性的同时,将成本降至最低。 PostgreSQL和MySQL 一样,将主从同步方式分为全同步、半同步、异步三种方式,考虑性能和数据一致性两大因素,选择半同步方式。 PostgreSQL 从 9.0 版本开始,主从的数据同步方式(同步WAL日志)支持以下两种: 异步流复制:事务提交之后不必等日志传递到 standby 就即可返回,从实例数据有一定的延迟。 同步流复制:当主实例事务提交之后,一定会等到日志传递到 standby后才返回,可以做到数据零丢失。 由于京东云云数据库 PostgreSQL 集群采用的是一主一从架构,如果数据同步方式采用同步流复制,那么当 standby 不可用的时候,会导致无法正常的往 PostgreSQL 集群中写数据。所以为了确保集群的高可用性,京东云云数据库 PostgreSQL 采用的主从数据同步方式为:异步流复制。 同时,京东云云数据库 PostgreSQL 集群是跨机架跨物理机部署的,如果创建的时候选择了跨可用区的话,集群的主从实例还能分别部署在两个不用的可用区。在这样的部署架构下,集群中的主从实例同时不可用的概率极低。 自动高可用—来看下京东云云数据库 PostgreSQL 是如何实现自动高可用的: 京东云云数据库 PostgreSQL 集群包括了主从两个实例,即上图的Master 和 Slave。Master和Slave会定时上报心跳信息给Sentinel服务,汇报自己的存活情况;当Slave长时间未上报心跳信息,Sentinel会认为此时Slave已经不可用了,这时 Sentinel 就会触发自动高可用的命令,告诉Manager需要新建一个从实例,即上图的Slave。Slave会根据一个最近的全量备份进行创建,当创建成功之后,会设置与Master的主从关系,从Master同步增量的数据。 ...

July 26, 2019 · 1 min · jiezi

Kong网关部署

Kong是一个使用了lua-nginx-module运行在Nginx之上的Lua应用。Kong是一个成熟的API网关解决方案。API 网关,即API Gateway,是大型分布式系统中,为了保护内部服务而设计的一道屏障,可以提供高性能、高可用的 API托管服务,从而帮助服务的开发者便捷地对外提供服务,而不用考虑安全控制、流量控制、审计日志等问题,统一在网关层将安全认证,流量控制,审计日志,黑白名单等实现。网关的下一层,是内部服务,内部服务只需开发和关注具体业务相关的实现。网关可以提供API发布、管理、维护等主要功能。开发者只需要简单的配置操作即可把自己开发的服务发布出去,同时置于网关的保护之下。 参考文档:https://konghq.com/ (kong官网) https://www.pocketdigi.com/bo...https://www.postgresql.org/ (postgresql官网)http://www.postgres.cn/index....环境:环境:Centos7配置:2c4g权限:root一、安装PostgreSQL注意:请勿使用"yum install kong-community-edition"安装Kong,必须指定版本号!"yum install kong-community-edition-0.14.1.*.noarch.rpm --nogpgcheck"1、配置yum源# 配置完yum库之后卸载之前安装的Postgresqlyum erase postgresql*# 删除遗留的数据rm -rf /var/lib/pgsql2、安装下载RPM(PostgreSQL YUM源),找到对应的版本 CentOS 7 - x86_64 # 安装yum源yum install https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm# 安装PostgreSQLyum install postgresql96-server postgresql96-contrib3、初始化数据库# 初始化数据库/usr/pgsql-9.6/bin/postgresql96-setup initdb4、PostgreSQL服务控制# PostgreSQL 使用systemctl作为服务托管service postgresql-9.6 start/stop/restart/reload# 或是systemctl start/stop/restart/status postgresql-9.6# 设置开机自启systemctl enable postgresql-9.65、卸载(顺便提供卸载PostgreSQL的命令)# 卸载PostgreSQLyum erase postgresql966、修改密码PostgreSQL数据库默认会创建一个Linux系统用户postgres,通过passwd命令可以设置密码。 # 创建postgres数据库账号su postgrespsqlALTER USER postgres WITH PASSWORD '123456';\qsu root7、设置远程控制7.1 修改vi /var/lib/pgsql/9.6/data/postgresql.conf文件,配置可以远程访问(正式环境按照白名单正确配置)将listen_addresses前的#去掉,并将 listen_addresses = 'localhost' 改成 listen_addresses = '*'; ...

July 14, 2019 · 2 min · jiezi

开发进阶篇书写高效的SQL语句

调查显示,SQL是目前第二大编程语言,自诞生以来40多年一直发挥着重要的作用,有50%的开发者都在使用SQL。虽然使用非常广泛,但是SQL的质量水平却并不令人满意。 根据经验,80%的数据库问题是由于SQL引起的,而80%的SQL问题来自于20%的SQL语句,在一些高并发高负载的系统中,由于一条SQL的性能问题导致数据库整体出现异常的情况屡见不鲜。 那么,面对SQL引起的数据库问题,我们又该如何解决呢? 虽然我们都知道问题,但是该如何解决?如果你对SQL有一些了解,想必也就知道,大体有四种能力是必备的: 1.充分理解新特性的功能以及其适用场景 2.将数据整理处理作为思路 3.从一开始就考虑好这个SQL的执行计划,驱动表是谁,采用何种JOIN方式连接到被驱动表 4.严格过滤不必要的数据 可见,如果你能够拥有以上四种能力,必然可以解决SQL引起的数据库问题,也必然会成为SOL语句编写市场上极具价值、抢手的存在。 但是此刻,也许你会有个疑惑:我要如何才能拥有这些能力呢? 这也正是我们今天想要给你的答案:其实墨天轮里面一门课程可以帮你完美锻炼这四项能力,成为真正能通过SQL语句编写解决实际业务问题的稀缺人才。 这门课程就是——ACOUG 核心专家、Oracle ACE 总监,号称"Oracle 的百科全书"——杨廷琨老师主讲的《高效SQL语句编写》 至今,这门课程已经全部完结,饱受好评,想要得到解决问题的你,快戳下方链接领取99元优惠券,免费的观看学习吧(注:本课程原价99,优惠券99,课程完全免费哦~) 优惠券:https://cs.enmotech.com/invit... 领完优惠券快戳课程链接学习吧~ 课程链接:https://cs.enmotech.com/course/6接下来,我们再详细介绍下这门《高效SQL语句编写》课程凭什么可以帮你解决SQL引起的数据库问题 第一,这门课程足够系统和深入,能够让你全面的了解到SQL语句编写引起的问题,从而重视SQL的执行效率。 第二,这门课程中有众多真实需求和案例,结合理论逐一找到完美解决方案,项目组可以直接使用。 一名合格的开发人员,要成为更有价值的存在,仅仅只有单点技能,是远远不够的,你需要了解的足够全面,小到数据处理,大到执行计划的制定,你需要了解的足够全面。 基于此,帮助更多的开发人员解决SQL引起的数据库问题是《高效SQL语句编写》课程的初衷。 所以,这门课程几乎涵盖了SQL引起的数据库问题的全部知识点。(下面放上课程大纲供你参考) 第三,专业的主讲人老师,在《高效SQL语句编写》课程中,主讲老师是ACOUG 核心专家、Oracle ACE 总监,号称"Oracle 的百科全书"——杨廷琨老师 杨廷琨先生是中国地区的第一批Oracle ACE总监,也是 ITPUB 论坛上最活跃的分享者之一,他日均一篇的博客更新坚持了10年之久,影响了很多Oracle DBA和开发者的学习和成长,他在SQL开发方向的积累丰富,对于性能和效率具有深刻理解。 适用人群:需要解决SQL引起的数据库问题,从而完成从低阶到高阶的跃迁的开发人员。 还有重要的一点,就是使用优惠券观看学习可立减99元!此课程原价99,使用优惠券就是免费!数量有限(仅100张),先到先得!(优惠券使用方式:扫描下方二维码——进入优惠券页面——输入手机号,获取优惠券——注册登录——点击购买——购买成功——学习观看)以上,介绍得差不多了,抢完优惠券的话,赶快戳下方链接观看学习吧! 学习地址:https://cs.enmotech.com/course/6

July 9, 2019 · 1 min · jiezi

使用Quick-BI连接AnalyticDB-for-PostgreSQL数据源

本文介绍如何通过阿里云Quick BI连接AnalyticDB for PostgreSQL数据库。 在Quick BI中新建AnalyticDB for PostgreSQL数据源登录Quick BI控制台。单击工作空间>数据源,进入数据源管理页面。单击新建数据源>AnalyticDB for PostgreSQL。在添加AnalyticDB for PostgreSQL数据源页面进行参数配置。 配置项说明显示名称数据源名称。数据库地址AnalyticDB for PostgreSQL的连接地址 。端口链接地址对应的端口号。数据库数据库名。Schema数据库Schema名。用户名AccessKey ID。密码Access Key Secret。完成上述参数配置后,单击连接测试测试连通性,测试通过后,单击添加添加数据源。使用Quick BI成功连接AnalyticDB for PostgreSQL数据源后,用户可以参考以下步骤学习如何在Quick BI中完成报表分析等操作。 创建数据集制作仪表板制作电子表格制作数据门户关于Quick BI的更过功能,请参见Quick BI相关文档。 本文作者:陆封阅读原文 本文为云栖社区原创内容,未经允许不得转载。

July 3, 2019 · 1 min · jiezi

Teradata应用迁移到AnalyticDB-for-PostgreSQL指导

AnalyticDB for PostgreSQL(简称:ADB for PG)对Teradata语法有着很好的兼容,将Teradata应用迁移到ADB for PG,只需进行有限的修改。本文介绍将Teradata应用迁移到ADB for PG应该注意的事项。 1 建表语句我们通过一个例子比较ADB for PG和Teradata的建表语句。对于如下的Teradata建表SQL语句, CREATE MULTISET TABLE test_table,NO FALLBACK , NO BEFORE JOURNAL, NO AFTER JOURNAL, CHECKSUM = DEFAULT, DEFAULT MERGEBLOCKRATIO ( first_column DATE FORMAT 'YYYYMMDD' TITLE '第一列' NOT NULL, second_column INTEGER TITLE '第二列' NOT NULL , third_column CHAR(6) CHARACTER SET LATIN CASESPECIFIC TITLE '第三列' NOT NULL , fourth_column CHAR(20) CHARACTER SET LATIN CASESPECIFIC TITLE '第四列' NOT NULL, fifth_column CHAR(1) CHARACTER SET LATIN CASESPECIFIC TITLE '第五列' NOT NULL, sixth_column CHAR(24) CHARACTER SET LATIN CASESPECIFIC TITLE '第六列' NOT NULL, seventh_column VARCHAR(18) CHARACTER SET LATIN CASESPECIFIC TITLE '第七列' NOT NULL, eighth_column DECIMAL(18,0) TITLE '第八列' NOT NULL , nineth_column DECIMAL(18,6) TITLE '第九列' NOT NULL )PRIMARY INDEX ( first_column ,fourth_column )PARTITION BY RANGE_N(first_column BETWEEN DATE '1999-01-01' AND DATE '2050-12-31' EACH INTERVAL '1' DAY );CREATE INDEX test_index (first_column, fourth_column) ON test_table;可以修改成ADB for PG的建表语句: ...

July 2, 2019 · 2 min · jiezi

使用Docker搭建-代码质量平台-SonarQube

一、拉取两个Docker镜像docker pull sonarqubedocker pull postgres二、运行数据库容器docker run --name postgresql -e POSTGRES_USER=sonar -e POSTGRES_PASSWORD=sonar -d postgres三、运行sonarqubedocker run --name sonarqube --link postgresql -e SONARQUBE_JDBC_URL=jdbc:postgresql://postgresql:5432/sonar -p 9000:9000 -d sonarqube四、运行成功后打开http://localhost:9000/默认用户名密码:adminadmin

July 1, 2019 · 1 min · jiezi

对于开发者来说快应用意味着一个新的蓝海

纵观近几年的移动互联网发展,新增用户已经明显放缓,在安卓平台上平均50%的用户每天都不安装应用,有25%的客户一天只安装1-2款应用。用户并不是对移动互联网没有需求,而是对于一些低频的APP,不愿意去下载新的应用。同时,对于开发者来说,应用分发的生态已经相对趋于成熟,创业者获得流量的成本越来越高、转换的效率也越来越低,那么作为一个开发者,该怎么办呢?快应用是一个10大手机厂商为完善主线产品,优化用户体验而建立的生态平台。它可以将网页应用和原生安卓应用的优点结合起来,实现无需安装、互联互通、性能好、功能完整和强留存的优点。而对于用户而言,快应用无需安装,即点即用,享受原生应用的性能体验。同时快应用框架深度集成进各大手机厂商系统中,在操作系统层面实现用户需求与应用服务间的无缝连接。比如,在北京的交通高峰时段,通过一个APP很有可能打不到车。而如果在快应用只需要搜索打车,它会列出所有的打车服务,即点即用、随时随地,非常方便。对于快应用开发者而言,国内10家主流厂商联合推出快应用平台,覆盖10亿移动设备,这里面就蕴藏了巨大的商业机会。 当你还在犹豫的时候,快店铺已经搭上快应用红利期的首班车,抢先跨入十二大手机联盟的快应用领域中,实现用户场景服务需求高达10亿,精准场景识别超过2000万,快应用小程序商铺超45万家,手机厂商合作伙伴超12家,模板覆盖全行业,品牌商家升至2370户以上,引爆了快应用蓝海行动。 以快应用的联盟服务商第壹近场帮助实现负一屏为例,通过旗下产品快店铺,实现了各管理模块和业务模块的全面在线,打造出一套覆盖引流、自建客户流量池的核心业务在线系统。在通信技术从 4G 演进到 5G 的今天,移动互联生态也在快速响应,诞生了以「快应用」和「小程序」为代表的即时应用新生态。但对比「小程序」,「快应用」在开发者接入数量和应用的接入数量上还有市场发展空间。 来源 快应用中心 https://www.diyismart.com/det...

June 27, 2019 · 1 min · jiezi

Tableau-BI工具对接-AnalyticDB-for-PostgreSQL数据源

AnalyticDB for PostgreSQL(原HybridDB for PostgreSQL)作为高性能分析型数据库,可以支持用户对其业务数据进行实时分析,能够让企业敏锐感知市场动态,做出必要决策。Tableau是一款数据分析与可视化工具,它支持连接本地或云端数据,不管是电子表格,还是数据库数据,都能进行无缝连接。本文介绍Tableau以AnalyticDB for PostgreSQL作为数据源,如何进行有效的数据分析。 使用AnalyticDB for PostgreSQLAnalyticDB for PostgreSQL基于Greenplum,所以在选择连接器的时候选择Greenplum连接器: 点开出现登录页面,填上DB的连接信息完成登录。 登录后页面: 根据指导操作,可以将任意表进行统计分析,并进行报表展示。 例如使用TPCH数据中的lineitem,点开一张工作表可以进行任意维度的数据展示了: 每从度量或者维度中选择一个字段,放到工作表区时,Tableau都会发送一个query到AnalyticDB for PostgreSQL进行数据查询,例如上述图表发送的query: BEGIN;declare "SQL_CUR0x7fdabf04ca00" cursor with hold for SELECT "lineitem"."l_linestatus" AS "l_linestatus", "lineitem"."l_shipmode" AS "l_shipmode", SUM("lineitem"."l_orderkey") AS "sum_l_orderkey_ok", ((CAST("lineitem"."l_shipdate" AS DATE) + CAST(TRUNC((-1 * (EXTRACT(DAY FROM "lineitem"."l_shipdate") - 1))) AS INTEGER) * INTERVAL '1 DAY') + CAST(TRUNC((-1 * (EXTRACT(MONTH FROM "lineitem"."l_shipdate") - 1))) AS INTEGER) * INTERVAL '1 MONTH') AS "tyr_l_shipdate_ok" FROM "public"."lineitem" "lineitem" GROUP BY 1, 2, 4;fetch 10000 in "SQL_CUR0x7fdabf04ca00一些注意事项关掉cursor默认情况下Tableau使用cursor模式从AnalyticDB for PostgreSQL拉取数据: ...

June 26, 2019 · 1 min · jiezi

AnalyticDB-for-PG-如何作为数据源对接帆软-FineBI

AnalyticDB for PostgreSQL 基于开源数据库 Greenplum 构建,兼容Greenplum 和 PostgreSQL 的语法,接口和生态。本章节介绍如何通过FineBI连接 分析型数据库PostgreSQL版 并进行报表开发。 准备工作 开始使用FineBI之前,用户需要先完成以下准备工作。下载并安装FineBI 操作步骤 首先进行”新建数据连接“,并选择 "Greenplum Database"。 之后将 JDBC URL,数据库名称,用户名密码等输入进行连接测试。 注意事项 对于新安装的FineBI,第一次连接 Greenplum 或 PostgreSQL 数据源时,需要先下载其 JDBC Driver,可以按操作步骤下载并将对应JDBC 驱动安装到 FineBI 目录。AnalyticDB for PostgreSQL 既支持 PostgreSQL JDBC Driver,也支持 Greenplum 社区 Driver。 本文作者:陆封阅读原文 本文为云栖社区原创内容,未经允许不得转载。

June 25, 2019 · 1 min · jiezi

Docker安装PostgreSql-10-CntOS-76

1. Docker 要求的内核版本>3.10 ,uname -r 命令检查内核版本 uname -r2. 更新yum yum update3.安装软件 yum install -y yum-utils device-mapper-persistent-data lvm24.查看docker 现有的版本 yum list docker-ce --showduplicates | sort -r5.选定一个版本安装 yum install docker-ce-18.06.3.ce-3.el76.启动docker systemctl start docker7.docker开机自启 systemctl enable docker8.docker验证 docker version9.修改docker 镜像源cd /etc/dockertouch daemon.jsonvim daemon.json10.输入配置文件内容,保存后退出{ "registry-mirrors":["https//registry.docker-cn.com"]}11.更新配置,重启dockersystemctl daemon-reloadsystemctl restart docker12.查询镜像docker search postgres13.下载镜像docker pull postgres:1014.创建镜像挂载目录docker volume reate pgdata15.启动镜像docker run --name pgsql -v pgdata:/var/lib/postgresql/data -e POSTGRES_PASSWORD=123456 -p 5432:5432 -d postgres:10 --name 命名镜像实例 -v 持久化挂载(宿主机目录:容器目录) -e 环境变量参数 -p 端口映射(宿主机端口:容器端口)16.查看运行中镜像docker ps

June 20, 2019 · 1 min · jiezi

墨天轮DBASK技术专家邀请函

各位数据库管理员、工程师们: 大家好,感谢大家一直以来对墨天轮DBASK的支持。DBASK 是一个开放、互助、便捷的数据库问答社区。在遇到任何数据库疑难杂症都可在DBASK上提问,平台认证的技术专家免费在线解答,最后归档沉淀为一个开放的知识库。 最近注意到Oracle官方文档中部分视图已经没有了说明,MOS上很多文档也隐藏了起来,开源公司不断被资本收购,但是我们始终向往构建一个开放开源、互帮互助的社区环境。 现在诚挚邀请您成为DBASK的技术专家,与我们一起讨论交流回复数据库相关问题,创建一个开放互助的数据库技术社区。 另外,近几年来,TiDB、达梦、巨杉等国产数据库也在不断成长,砥砺前行,还有阿里、华为等云上数据库作为新兴力量的加入,相信未来国产数据库一定会大有作为。另外,我们也会陆续在DBASK中开放国产数据库的专区,特别欢迎国产数据库相关的专家入驻DBASK,为国产数据库添砖加瓦! 专家权利:a.可以看到平台上所有的问题,参与讨论或者学习b.身份象征:平台标注技术专家的标识c.定期邀请您参加我们的线下专家交流会d.赠送技术嘉年华等大会门票、文化衫、书籍e.在 DBASK上回答问题、上传技术文档等可以获得墨值,墨值可用于兑换话费、京东卡等等 (PS:成为专家后自动赠送50墨值)。 DBASK小程序: 随着用户的不断增多,为了用户使用更方便,DBASK发布了微信小程序。小程序的发布可以让大家随时随地提问,专家也可在小程序内即时回复,减少了提问的门槛,加快问题交互的流程。另外可以在微信小程序中浏览知识库,方便查找学习相关问题。 DBASK常驻专家团下面是墨天轮DBASK常驻专家团队(其中囊括了国内IT服务商中绝大部分的Oracle ACE和Oracle ACE总监级别的技术专家)。我们特别欢迎数据库管理员、工程师们入驻DBASK,为墨天轮DBASK专家团队注入新鲜的血液。 如何成为DBASK技术专家?网页登录DBASK:https://cs.enmotech.com/issue,点击右上角【申请成为专家】。即可加入墨天轮DBASK专家团队!(PS:审核通过后须重新登录)

June 18, 2019 · 1 min · jiezi

Oracle应用迁移到AnalyticDB-for-PostgreSQL指导

AnalyticDB for PostgreSQL(简称:ADB for PG)对Oracle语法有着较好的兼容,本文介绍如何将Oracle应用迁移到AnalyticDB for PostgreSQL。 1 PL/SQLPL/SQL(Procedural Language/SQL)是一种过程化的SQL语言,是Oracle对SQL语句的拓展,使得SQL的使用可以具有一般编程语言的特点,因此,可以用来实现复杂的业务逻辑。PL/SQL对应了ADB for PG中的PL/PGSQL 1.1PackageADB for PG的plpgsql不支持package,需要把package 转换成 schema,并package里面的所有procedure和 function转换成ADB for PG的function。例如: create or replace package pkg is …end;可以转换成: create schema pkg;Package定义的变量 procedure/function的局部变量保持不变,全局变量在ADB for PG中可以使用临时表进行保存。详见1.4.5节。Package初始化块 如果可以删掉,就删掉,删不掉的话,可以使用function封装,在需要的时候主动调用该function。Package 内定义的procedure/function Package 内定义的procedure和function 转成adb for pg的function,并把function 定义到package对应的schema内。例如,有一个Package名为pkg中有如下函数:FUNCTION test_func (args int) RETURN int is var number := 10;BEGIN… … END;转换成如下ADB for PG的function:CREATE OR REPLACE FUNCTION pkg. test_func(args int) RETURNS int AS $$ … … $$ LANGUAGE plpgsql;1.2 Procedure/function对于oracle的procedure和function,不论是package的还是全局的,都转换成adb for pg 的function。例如: ...

June 17, 2019 · 6 min · jiezi

order-by造成分页查询的记录重复

场景有这样一张表,分页查询时,第一页的记录又出现下第二页中,总之每一页会出现之前出现的内容。原因是sort值重复 分析在数据库(PostgreSQL)中使用查询语句:第一页:SELECT code,name,sort FROM plat_user ORDER BY sort ASC limit 10 offset 0;第二页:SELECT code,name,sort FROM plat_user ORDER BY sort ASC limit 10 offset 10;第三页:SELECT code,name,sort FROM plat_user ORDER BY sort ASC limit 10 offset 20; 查询结果:在第一页和第二页出现了重复的记录。 原因sort的值重复了 解决方法用来order by的字段要保证唯一性。比如加上UNIQUE或者用户输入时保证其唯一性。

June 13, 2019 · 1 min · jiezi

PostgreSQL-JSONB-使用入门

json 类型说明根据RFC 7159中的说明,JSON 数据类型是用来存储 JSON(JavaScript Object Notation)数据的。这种数据也可以被存储为text,但是 JSON 数据类型的优势在于能强制要求每个被存储的值符合 JSON 规则。也有很多 JSON 相关的函数和操作符可以用于存储在这些数据类型中的数据 PostgreSQL支持两种 JSON 数据类型:json 和 jsonb。它们几乎接受完全相同的值集合作为输入。两者最大的区别是效率。json数据类型存储输入文本的精准拷贝,处理函数必须在每 次执行时必须重新解析该数据。而jsonb数据被存储在一种分解好的二进制格式中,因为需要做附加的转换,它在输入时要稍慢一些。但是 jsonb在处理时要快很多,因为不需要重新解析。 重点:jsonb支持索引由于json类型存储的是输入文本的准确拷贝,存储时会空格和JSON 对象内部的键的顺序。如果一个值中的 JSON 对象包含同一个键超过一次,所有的键/值对都会被保留( 处理函数会把最后的值当作有效值)。 jsonb不保留空格、不保留对象键的顺序并且不保留重复的对象键。如果在输入中指定了重复的键,只有最后一个值会被保留。 推荐把JSON 数据存储为jsonb在把文本 JSON 输入转换成jsonb时,JSON的基本类型(RFC 7159 )会被映射到原生的 PostgreSQL类型。因此,jsonb数据有一些次要额外约束。比如:jsonb将拒绝除 PostgreSQL numeric数据类型范围之外的数字,而json则不会。 JSON 基本类型和相应的PostgreSQL类型 JSON 基本类型PostgreSQL类型注释stringtext不允许\u0000,如果数据库编码不是 UTF8,非 ASCII Unicode 转义也是这样numbernumeric不允许NaN 和 infinity值booleanboolean只接受小写true和false拼写null(无)SQL NULL是一个不同的概念json 输入输出语法-- 简单标量/基本值-- 基本值可以是数字、带引号的字符串、true、false或者nullSELECT '5'::json;-- 有零个或者更多元素的数组(元素不需要为同一类型)SELECT '[1, 2, "foo", null]'::json;-- 包含键值对的对象-- 注意对象键必须总是带引号的字符串SELECT '{"bar": "baz", "balance": 7.77, "active": false}'::json;-- 数组和对象可以被任意嵌套SELECT '{"foo": [true, "bar"], "tags": {"a": 1, "b": null}}'::json;-- "->" 通过键获得 JSON 对象域 结果为json对象select '{"nickname": "goodspeed", "avatar": "avatar_url", "tags": ["python", "golang", "db"]}'::json->'nickname' as nickname; nickname------------- "goodspeed"-- "->>" 通过键获得 JSON 对象域 结果为text select '{"nickname": "goodspeed", "avatar": "avatar_url", "tags": ["python", "golang", "db"]}'::json->>'nickname' as nickname; nickname----------- goodspeed -- "->" 通过键获得 JSON 对象域 结果为json对象select '{"nickname": "goodspeed", "avatar": "avatar_url", "tags": ["python", "golang", "db"]}'::jsonb->'nickname' as nickname; nickname------------- "goodspeed"-- "->>" 通过键获得 JSON 对象域 结果为text select '{"nickname": "goodspeed", "avatar": "avatar_url", "tags": ["python", "golang", "db"]}'::jsonb->>'nickname' as nickname; nickname----------- goodspeed当一个 JSON 值被输入并且接着不做任何附加处理就输出时, json会输出和输入完全相同的文本,而jsonb 则不会保留语义上没有意义的细节 ...

May 30, 2019 · 9 min · jiezi

使用Kettle导入数据到ADB-for-PostgreSQL

摘要: 文章介绍了使用Kettle将数据导入到AnalyticDB for PostgreSQL,包括使用表输出方式(INSERT)和批量加载方式(COPY)导入到AnalyticDB for PostgreSQL的详细步骤和操作流程。Kettle简介Kettle(现也称为Pentaho Data Integration,简称PDI)是一款非常受欢迎的开源ETL工具软件,主要用于数据整合、转换和迁移。Kettle除了支持各种关系型数据库,HBase MongoDB这样的NoSQL数据源外,它还支持Excel、Access这类小型的数据源。并且通过这些插件扩展,kettle可以支持各类数据源。 下图显示了Kettle和ADB for PostgreSQL之间的关系,数据源通过Kettle进行ETL或数据集成操作以后可以和ADB for PostgreSQL进行交互: Kettle支持的数据来源非常丰富,主要包括以下分类: 表输入文本文件输入生成记录/自定义常量获取系统信息各类格式文件输入Json输入以及其他输入更详细的输入可以从界面中的“核心对象”的“输入”分类中查看。 Kettle支持的表输入来源自数据库连接中使用SQL语句获取,其中数据库连接支持非常丰富的连接方式,包括: Native(JDBC)连接ODBC连接OCI连接JNDI连接通过这些连接方式,可以支持连接大多数主流数据库,如Oracle, SQL Server, MySQL, DB2, PostgreSQL, Sybase, Teradata等等,更详细的连接信息可以参考官方文档:https://help.pentaho.com/Documentation/8.2/Setup/Configuration/Define_Data_Connections Kettle导入到ADB for PostgreSQLKettle支持导入到ADB for PostgreSQL的方式目前,Kettle支持的数据导入到ADB for PostgreSQL的方式有: 导入方式说明表输出(INSERT方式)采用JDBC作为导入方式 支持批量插入,批量插入使用JDBC的batch insert方法 批量加载(COPY方式)采用COPY作为导入方式 对于大表,COPY方式性能达到批量插入性能的10倍左右 表输出(INSERT方式)导入会流过Master节点并做解析之后分布到对应的Segment节点上,这种方式相对较慢并且不适合导入大量数据。批量加载(COPY方式)导入方式比INSERT语句插入多行的效率更高。 以下将分别介绍如何通过这两种方式将外部数据迁移到AnalyticDB for PostgresSQL。 准备工作使用Kettle将外部数据导入AnalyticDB for PostgresSQL之前,需要完成以下准备工作。 在本地主机中安装kettle在AnalyticDB for PostgreSQL中创建目标数据库、模式和表。表输出方式导入数据到ADB for PostgreSQLKettle采用表输出方式,支持使用通用的JDBC接口,从各种数据库源导入到ADB for PostgreSQL中。以下就以MySQL为例说明如何通过JDBC接口导入数据到ADB for PostgreSQL中。 1.在Kettle中新建一个转换。2.在转换中新建一个MySQL数据库连接作为输出源,详细的参数配置如下表所示。配置参数时,不要勾选Use Result Streaming Cursor。 配置项说明连接名称数据连名连接类型选择MySQL连接方式选择Native(JDBC)主机名MySQL的连接地址数据库名称MySQL的数据库名端口号连接地址对应的端口号用户名用户名密码用户密码3.完成上述参数配置后,单击测试测试连通性,测试通过后单击确认。4.在转换中新建一个Greenplum数据库连接作为输入源,详细的参数配置如下表所示。 配置项说明连接名称数据连名连接类型选择Greenplum连接方式选择Native(JDBC)主机名AnalyticDB for PostgreSQL的连接地址数据库名称AnalyticDB for PostgresSQL的数据库名端口号连接地址对应的端口号用户名用户名密码用户密码5.完成上述参数配置后,单击测试测试连通性,测试通过后单击确认。6.在kettle左侧核心对象的输入中,找到表输入,并将其拖动入到工作区。 ...

May 7, 2019 · 1 min · jiezi

在线数据库关系图设计工具-dbdiagramio

前段时间,笔者在设计某个系统模块的时候,需要增加十几张表。 为了简单快速地把这十几张表设计并定义出来,我找到了一个可以在线设计数据库关系图(database relationship diagram)且可以导出DDL SQL的工具——dbdiagram.io。 dbdiagram.io是holistics.io这款商业产品的社区版。 dbdiagram.io使用DSL语言,可以简单快速地创建数据库关系图。 这款工具的操作界面也非常简约并具有设计感: 有时候我们需要在关系型数据库中设计一些表,以便实现我们的业务功能。或者我们对某个系统的表结构不是很熟悉,希望画个图表示一下这些实体之间的关系。又或者我们希望把设计好的数据库关系图直接转化为DDL SQL。而且我们不想使用复杂的工具,付出高昂的学习成本。也不想用太重的工具,占用内存。这个时候这个在线的数据库关系图工具就排上用场了。 语法下面介绍一下它的语法。 定义表的语法如下: Table users { id integer [pk] username varchar [not null, unique] full_name type [not null] .....}如果表名太长还支持取别名: Table longtablename as t_alias { .....}定义外键支持如下三种关系: < : One-to-many> : Many-to-one- : One-to-one并且提供了3种定义外键的方式: Ref name-optional { table1.field1 < table2.field2}Ref name-optional: t1.f1 < t2.f2Table posts { id integer [pk, ref: < comments.post_id] user_id integer [ref: > users.id]}例子下面以电商系统常用的几张表作为例子演示一下它的用法。 当你登录自己的Google账号以后,可以把你设计好的图形保存到线上,这样就可以通过一个唯一的链接访问 : https://dbdiagram.io/d/5cc910...。 ...

May 1, 2019 · 1 min · jiezi

PostgreSQL安全性:快速查看身份验证最佳实践

来源 | 愿码(ChainDesk.CN)内容编辑愿码Slogan | 连接每个程序员的故事网站 | http://chaindesk.cn愿码愿景 | 打造全学科IT系统免费课程,助力小白用户、初级工程师0成本免费系统学习、低成本进阶,帮助BAT一线资深工程师成长并利用自身优势创造睡后收入。官方公众号 | 愿码 | 愿码服务号 | 区块链部落免费加入愿码全思维工程师社群 | 任一公众号回复“愿码”两个字获取入群二维码本文阅读时长:11minPostgreSQL中的身份验证身份验证回答了问题:谁是用户?PostgreSQL支持一些 身份验证方法,包括以下内容:· Trust认证:任何可以连接到服务器的人都有权使用访问pg_hba.conf配置文件中指定的数据库/数据库。通常用于允许在单个用户计算机上使用Unix域套接字进行连接以访问数据库。此方法也可以与TCP / IP一起使用,但很少允许从本地主机以外的任何IP地址进行连接。 · Ident认证:这通过从ident服务器获取客户端的操作系统用户名然后使用它来访问数据库服务器来工作。这个方法建议用于客户端计算机受系统管理员严格控制的封闭网络。· Peer认证:这类似于身份,但客户端操作系统用户名是从内核获得的。· GSSAPI认证:GSSAPI是RFC2743中定义的行业标准。它提供自动身份验证(单点登录)。· LDAP认证: LDAP服务器仅用于验证用户名/密码对。· 密码认证:有以下三种方法o SCRAM-SHA-256:PostgreSQL 10中引入的最强的身份验证方法。此方法可防止对不受信任的连接进行密码嗅探。默认密码验证方法是MD5使用此功能,配置参数 password_encryption应更改为 scram-sha-256o MD5:MD5具有已知的限制,例如:预先计算的查找表以破解密码哈希。此外,MD5只有40亿个独特的哈希值。最后,MD5计算速度非常快,因此暴力密码猜测不需要大量的CPU资源。对于新应用程序,建议仅使用scram-sha-256。此外,PostgreSQL提供了从scram-sha-256迁移的方法。o Password:建议不要使用此密码,因为密码以明文格式发送到服务器。 要了解身份验证,您需要具有以下信息:· 身份验证通过pg_hba.conf文件控制,其中hba代表基于主机的身份验证。· 最好了解PostgreSQL发行版附带的默认初始身份验证设置· pg_hba.conf文件通常位于数据目录中,但也可以在postgresql.conf配置文件中指定。更改身份验证时,您需要发送一个SIGHUP信号,这是通过基于PostgreSQL平台的几种方法完成的。注意,发送信号的用户应该是超级用户、Postgres或Linux发行版上的根系统用户;同样,这取决于平台。以下是重新加载PostgreSQL配置的几种方法的示例:psql -U postgres -c “SELECT pg_reload_conf();“sudo service postgresql reloadsudo /etc/init.d/postgresql reloadsudo Kill -HUP sudo systemctl reload postgresql-11.service· 该订单的 pg_hba.conf记录或条目是非常重要的。将会话连接pg_hba.conf逐个与记录进行比较, 直到它被拒绝或到达配置文件的末尾。· 最后,检查PostgreSQL日志文件以确定配置重新加载后是否存在错误是非常重要的。PostgreSQL pg_hba.conf与postgresql.conf一样,pg_hba.conf文件由一组记录组成,可以使用哈希符号注释行,并且忽略空格。pg_hba.conf文件记录的结构如下:host_type database user [IP-address| address] [IP-mask] auth-method [auth-options]host_type查询的部分可以是以下内容:· Local:在 Linux系统中使用,允许用户使用Unix域套接字连接访问PostgreSQL。· Host:这是为了允许来自其他主机的连接,基于地址或IP地址,使用带有和不带SSL加密的TCP / IP。· Hostssl:这与主机类似,但应使用SSL加密连接。· Hostnossl:这也与主机类似,但不应加密连接。查询的数据库部分是用户想要连接的数据库的名称。为了提高灵活性,您还可以使用以逗号分隔的列表来指定多个数据库,或者可以all用来指示用户可以访问数据库集群中的所有数据库。此外,可以使用相同的用户和相同的角色值来指示数据库名称与用户名相同,或者用户是与数据库同名的角色的成员。查询的用户部分指定数据库用户的名称; 同样,all值与所有用户匹配。IP地址,地址和IP子网掩码用于标识用户所在的主机尝试连接。可以使用无类别域间路由(CIDR)或点十进制表示法指定IP地址。最后,密码验证方法可以信任,MD5,拒绝等。以下是配置PostgreSQL身份验证的一些典型示例:· 示例1:PostgreSQL集群上的任何用户都可以使用Unix域套接字访问任何数据库,如以下数据库表所示:#TYPE DATABASE USER ADDRESS METHODLocal all all trust· 示例2:PostgreSQL集群上的任何用户都可以使用本地环回IP地址访问任何数据库,如以下数据库表所示:#TYPE DATABASE USER ADDRESS METHODHost all all 127.0.0.1/32 trusthost all all ::1/128 trust· 示例3:192.168.0.53拒绝来自IP地址的所有连接 ,来自192.168.0.1/24范围的连接被接受,如下数据库表所示:#TYPE DATABASE USER ADDRESS METHODHost all all 192.168.0.53/32 rejectHost all all 192.168.0.1/24 trustPostgreSQL提供了一种非常方便的方法来查看pg_hba.conf文件中定义的规则,方法是提供一个名为pg_hba_file_rules的视图,如下所示:postgres=# SELECT row_to_json(pg_hba_file_rules, true) FROM pg_hba_file_rules limit 1; row_to_json ————————- {“line_number”:84, + “type”:“local”, + “database”:[“all”], + “user_name”:[“all”], + “address”:null, + “netmask”:null, + “auth_method”:“trust”,+ “options”:null, + “error”:null}(1 row)侦听地址该listen_addresses 选项定义于postgresql.conf。PostgreSQL listen_addresses连接设置用于标识服务器应从客户端应用程序侦听的IP地址列表。这些listen_addresses是以逗号分隔的主机名或IP地址列表。更改这个值需要重启服务器。此外,还应注意以下几点:· 默认值为localhost,它限制从网络到PostgreSQL集群的直接连接。· 给出一个空列表意味着服务器应该只接受Unix套接字连接· 该值*表示全部对于新加入PostgreSQL的开发人员来说,忘记更改侦听地址是一个常见的错误。如果开发人员忘记更改,并尝试使用网络中的TCP/IP连接到PostgreSQL,则会出现以下错误:Connection refused Is the server running on host and accepting TCP/IP connections on port 5432?认证最佳实践身份验证最佳实践取决于整个基础架构设置,应用程序的性质,用户的特征,数据敏感性等。例如,以下设置对于初创公司很常见:数据库应用程序(包括数据库服务器)托管在同一台计算机上,并且仅由公司内部用户从一个物理位置使用。通常,数据库服务器使用防火墙与世界隔离;在这种情况下,您可以使用SCRAM-SHA-256身份验证方法并限制IP地址,以便数据库服务器接受特定范围或集合内的连接。请注意,重要的是不要使用超级用户或数据库所有者帐户连接到数据库,因为如果此帐户被黑客入侵,则整个数据库集群将被暴露。如果是应用服务器 - 业务逻辑 - 和数据库服务器不在同一台机器上,您可以使用强大的身份验证方法,例如LDAP和Kerberos。但是,对于数据库服务器和应用程序位于同一台计算机上的小型应用程序,SCRAM-SHA-256身份验证方法以及将侦听地址限制为localhost可能就足够了。要对应用程序进行身份验证,建议仅使用一个用户,并尝试使用连接池软件减少允许的最大连接数,以便更好地调整PostgreSQL资源。在应用业务逻辑时可能需要另一级别的安全性来区分不同的登录用户。对于真实用户,更需要LDAP或Kerberos身份验证。此外,如果从外部世界访问数据库服务器,则使用SSL证书加密会话以避免数据包嗅探很有用。您还应该记住保护信任所有localhost连接的数据库服务器,因为访问localhost的任何人都可以访问数据库服务器。角色系统和代理身份验证通常,在设计应用程序时,登录角色用于配置数据库连接和连接工具。需要实现另一级安全性以确保使用该应用程序的用户被授权执行某项任务。该逻辑通常在应用程序业务逻辑中实现。在使用事务块中的SET SESSION AUTHORIZATION 语句或SET ROLE命令建立或重用连接后,通过将身份验证委派给另一个角色,数据库的角色系统也可用于部分实现此逻辑,如下所示:postgres=# SELECT session_user, current_user; session_user | current_user ————–+————– postgres | postgres(1 row)postgres=# SET SESSION AUTHORIZATION test_user;SETpostgres=> SELECT session_user, current_user; session_user | current_user ————–+————– test_user | test_user(1 row)设置角色需要角色成员资格,而设置会话授权需要超级用户权限。允许应用程序作为超级用户进行连接是危险的,因为可以分别使用reset role和reset session命令重置set session authorization和set role命令,从而允许应用程序获得超级用户权限。为了了解如何使用PostgreSQL角色系统来实现身份验证和授权,我们将使用角色系统和汽车门户应用程序。在汽车门户应用程序中,可以将多组用户分类为web-app-user、public-user、registered-user、seller-user和admin-user。web应用程序用户用于配置业务逻辑连接工具;公共用户、注册用户和卖家用户用于区分用户。公共用户组只能访问公共信息,如广告,但不能作为注册用户添加评级,也不能创建广告,因为卖家用户。管理员用户是管理应用程序所有内容的超级角色,例如过滤垃圾邮件和删除不遵守网站策略的用户。当汽车门户网站应用程序连接到数据库时,将使用Web用户。之后,car_portal将根据用户类调用set role命令。这种身份验证方法称为代理身份验证。以下示例演示了如何使用角色系统来实现代理身份验证。第一步是创建角色并分配角色成员身份和权限,如下所示:CREATE ROLE web_app_user LOGIN NOINHERIT;CREATE ROLE public_user NOLOGIN;GRANT SELECT ON car_portal_app.advertisement_picture, car_portal_app.advertisement_rating , car_portal_app.advertisement TO public_user;GRANT public_user TO web_app_user;GRANT USAGE ON SCHEMA car_portal_app TO web_app_user, public_user;该NOINHERIT选项web_app_user 不允许用户继承角色成员资格的权限;但是,web_app_user可以将角色更改为公共用户,如以下示例所示:$ psql car_portal -U web_app_usercar_portal=> SELECT * FROM car_portal_app.advertisement;ERROR: permission denied for relation advertisementcar_portal=> SET ROLE public_user;SETcar_portal=> SELECT * FROM car_portal_app.advertisement; advertisement_id | advertisement_date | car_id | seller_account_id ——————+——————–+——–+——————-(0 rows)car_portal=> SELECT session_user, current_user; session_user | current_user ————–+————– web_app_user | public_user(1 row) ...

April 16, 2019 · 2 min · jiezi

构建可扩展的PostgreSQL解决方案

来源 | 愿码(ChainDesk.CN)内容编辑愿码Slogan | 连接每个程序员的故事网站 | http://chaindesk.cn愿码愿景 | 打造全学科IT系统免费课程,助力小白用户、初级工程师0成本免费系统学习、低成本进阶,帮助BAT一线资深工程师成长并利用自身优势创造睡后收入。官方公众号 | 愿码 | 愿码服务号 | 区块链部落免费加入愿码全思维工程师社群 | 任一公众号回复“愿码”两个字获取入群二维码本文阅读时长:11min可伸缩性是指软件系统随着使用它的业务增长而增长的能力。 PostgreSQL提供了一些功能,可以帮助您构建可扩展的解决方案,但严格来说, PostgreSQL本身是不可扩展的。它可以有效地利用单台机器的以下资源:它使用多个CPU内核通过并行查询功能更快地执行单个查询如果配置正确,它可以使用所有可用内存进行缓存数据库的大小不受限制; 创建多个表空间时,PostgreSQL可以使用多个硬盘; 通过分区,可以同时访问硬盘,从而加快数据处理速度但是,当涉及将数据库解决方案扩展到多台计算机时,它可能非常有问题,因为标准PostgreSQL服务器只能在单个计算机上运行。在本文中,我们将介绍PostgreSQL中不同的扩展方案及其实现。系统可扩展性的要求意味着现在支持业务的系统也应该能够以与其增长相同的服务质量来支持相同的业务。假设一个数据库可以存储1 GB的数据,并且每秒有效地处理100个查询。如果随着业务的发展,处理的数据量会增长100倍?它能够每秒支持10,000个查询并处理100 GB的数据吗?也许不是现在,不是在同一个装置中。但是,可以扩展可扩展的解决方案,以便能够在需要时立即处理负载。在需要获得更好性能的场景中,设置更多服务器以处理额外负载并从主服务器将相同数据复制到它们是很常见的。在需要高可用性的情况下,这也是将数据连续复制到备用服务器的典型解决方案,以便在主服务器崩溃时它可以接管。可扩展的PostgreSQL解决方案复制可用于许多扩展方案。其主要目的是在系统出现故障时创建和维护备份数据库。对于物理复制尤其如此。但是,复制也可用于提高基于PostgreSQL的解决方案的性能。有时,第三方工具可用于实现复杂的扩展方案。扩展以进行大量查询想象一下,有一个系统应该处理大量的读取请求。例如,可能有一个应用程序实现支持网站上的自动完成功能的HTTP API端点。每次用户在Web表单中输入字符时,系统都会在数据库中搜索名称以用户输入的字符串开头的对象。由于用户数量众多,查询数量可能非常大,并且还因为每个用户会话都处理了多个请求。为了处理大量请求,数据库应该能够使用多个CPU核心。如果同时请求的数量非常大,则处理它们所需的核心数量可能大于单个机器可能具有的核心数量。这同样适用于应该同时处理多个重度查询的系统。您不需要大量查询,但是当查询本身很大时,使用尽可能多的CPU将提供性能优势,尤其是在使用并行查询时。在这种情况下,一个数据库无法处理负载,可以设置多个数据库,设置从一个主数据库到所有数据库的复制,使每个数据库作为热备用,然后让应用程序查询不同的数据库不同的要求。应用程序本身可以是智能的,每次都可以查询不同的数据库,但这需要应用程序的数据访问组件的特殊实现,如下所示:另一个选择是使用一个名为Pgpool-II的工具,它可以作为几个PostgreSQL数据库前面的负载均衡器。该工具公开了一个SQL接口,应用程序可以连接到那里,就好像它是一个真正的PostgreSQL服务器。然后Pgpool-II会将查询重定向到当时执行最少查询的数据库; 换句话说,它将执行负载平衡:另一种选择是将应用程序与数据库一起扩展,以便应用程序的一个实例将连接到数据库的一个实例。在这种情况下,应用程序的用户应该连接到许多实例中的一个。这可以通过HTTP负载平衡来实现:数据分片当问题不是并发查询的数量,而是数据库的大小和单个查询的速度时,可以实现不同的方法。可以将数据分成多个服务器,这些服务器将并行查询,然后将查询结果合并到这些数据库之外。这称为数据分片。PostgreSQL提供了一种基于表分区实现分片的方法,其中分区位于不同的服务器上,而另一个分区(主服务器)将它们用作外部表。在主服务器上定义的父表上执行查询时,具体取决于WHERE子句和分区的定义,PostgreSQL可以识别哪些分区包含所请求的数据,并且只查询这些分区。根据查询,有时可以在远程服务器上执行联接,分组和聚合。PostgreSQL可以并行查询不同的分区,这将有效地利用多台机器的资源。完成所有这些后,可以在应用程序连接到单个数据库时构建解决方案,该数据库将根据要查询的数据在不同的数据库服务器上物理执行查询。也可以在使用PostgreSQL的应用程序中构建分片算法。简而言之,应用程序可能会知道哪些数据位于哪个数据库中,只在那里写入,并且只能从那里读取数据。这会给应用程序增加很多复杂性。另一种选择是使用市场上可用的基于PostgreSQL的分片解决方案或开源解决方案。它们有各自的优点和缺点,但常见的问题是它们基于PostgreSQL的早期版本,并且不使用最新的功能(有时会提供自己的功能)。最受欢迎的分片解决方案之一是Postgres-XL,它使用运行PostgreSQL的多个服务器实现无共享架构。该系统有几个组成部分:· 多个数据节点:存储数据· 单个全局事务监视器(GTM):管理集群,提供全局事务一致性· 多个协调器节点:支持用户连接,构建查询执行计划,并与GTM和数据节点交互Postgres-XL实现与PostgreSQL相同的API,因此应用程序不需要以任何特殊方式处理服务器。它符合ACID,这意味着它支持事务和完整性约束。该COPY命令也受支持。使用Postgres-XL的主要好处如下:它可以扩展以通过添加更多数据节点来支持更多读取操作它可以扩展以通过添加更多协调器节点来支持更多写入操作Postgres-XL的当前版本(在撰写本文时)基于PostgreSQL 10,它相对较新Postgres-XL的主要缺点是它不提供开箱即用的任何高可用性功能。当更多服务器添加到群集时,任何服务器失败的可能性都会增加。这就是为什么你应该注意备份或实现数据节点本身的复制。Postgres-XL是开源的,但可以获得商业支持。值得一提的另一个解决方案是Greenplum。它被定位为大规模并行处理数据库的实现,专门为数据仓库而设计。它有以下组件:· 主节点:管理用户连接,构建查询执行计划,管理事务· 数据节点:存储数据并执行查询Greenplum还实现了PostgreSQL API,应用程序可以连接到Greenplum数据库而无需任何更改。它支持事务,但对完整性约束的支持是有限的。该COPY命令受支持。Greenplum的主要好处如下:它可以扩展以通过添加更多数据节点来支持更多读取操作。它支持面向列的表组织,这对于数据仓库解决方案非常有用。支持数据压缩。开箱即用支持高可用性功能。可以(并且建议)添加辅助主服务器,以便在主服务器崩溃时接管。还可以向数据节点添加镜像以防止数据丢失。缺点如下:它不能扩展以支持更多的写入操作。一切都通过单个主节点,添加更多数据节点不会使写入更快。但是,可以直接从数据节点导入文件中的数据。它的核心使用PostgreSQL 8.4。Greenplum在PostgreSQL基础代码中添加了许多改进和新功能,但它仍然基于一个非常旧的版本; 但是,该系统正在积极开发中。Greenplum不支持外键,并且对唯一约束的支持是有限的。Greenplum有商业和开源版本。扩展许多连接与可伸缩性相关的另一个用例是当数据库连接的数量很大时。但是,当在具有大量微服务的环境中使用单个数据库并且每个数据库都有自己的连接池时,即使它们不执行太多查询,也可能在数据库中打开数百甚至数千个连接。每个连接都消耗服务器资源,只是处理大量连接的要求已经成为问题,甚至不执行任何查询。如果应用程序仅在需要查询数据库并在之后关闭它们时才使用连接池和打开连接,则可能会出现另一个问题。建立数据库连接需要时间 - 而不是太多,但是当操作数量很大时,总开销将是巨大的。有一个名为PgBouncer的工具可以实现连接池功能。它可以接受来自许多应用程序的连接,就像它是PostgreSQL服务器一样,然后打开有限数量的数据库连接。它将为多个应用程序的连接重用相同的数据库连接。建立从应用程序到PgBouncer的连接的过程比连接到真实数据库要快得多,因为PgBouncer不需要初始化会话的数据库后端进程。PgBouncer可以创建多个连接池,它们可以在以下三种模式之一中工作:· 会话模式:与PostgreSQL服务器的连接用于与PgBouncer的客户端连接的生命周期。这种设置可用于加速应用程序端的连接过程。这是默认模式。· 事务模式:与PostgreSQL的连接用于客户端执行的单个事务。当仅同时执行少量翻译时,这可用于减少PostgreSQL端的连接数。· 语句模式:数据库连接用于单个语句。然后将它返回到池中,并为下一个语句使用不同的连接。此模式类似于交易模式,但更具侵略性。请注意,使用语句模式时,无法进行多语句事务。可以设置不同的池以在不同模式下工作。可以让PgBouncer连接到多个PostgreSQL服务器,从而起到反向代理的作用。可以使用PgBouncer的方式如下图所示:PgBouncer建立了与数据库的多个连接。当应用程序连接到PgBouncer并启动事务时,PgBouncer会为该应用程序分配现有数据库连接,将所有SQL命令转发到数据库,然后将结果传回。交易完成后,PgBouncer将断开连接,但不关闭它们。如果另一个应用程序启动事务,则可以使用相同的数据库连接。这样的设置需要配置PgBouncer以在事务模式下工作。PostgreSQL提供了几种实现复制的方法,这种方法可以维护来自另一个服务器或服务器上的数据库的数据副本。这可以用作备份或备用解决方案,以便在主服务器崩溃时接管。通过使负载可以分布在多个数据库服务器上,复制还可用于提高软件系统的性能。

April 15, 2019 · 1 min · jiezi

CentOS 7 安装 PostgreSQL 11

CentOS 7 安装 PostgreSQL 11PostgreSQL: The World’s Most Advanced Open Source Relational Database为了学一学号称世界上最先进的开源关系型数据库,就要先安装,接下来就在CentOS 7上安装PostgreSQL 11。环境阿里云 CentOS 7.3.1611PostgreSQL 11PostgreSQLPostgreSQL是以加州大学伯克利分校计算机系开发的 POSTGRES,现在已经更名为PostgreSQL,版本 4.2为基础的对象关系型数据库管理系统(ORDBMS)。PostgreSQL支持大部分 SQL标准并且提供了许多其他现代特性:复杂查询、外键、触发器、视图、事务完整性、MVCC。同样,PostgreSQL 可以用许多方法扩展,比如, 通过增加新的数据类型、函数、操作符、聚集函数、索引。免费使用、修改、和分发 PostgreSQL,不管是私用、商用、还是学术研究使用。PostgreSQL从9.3版本开始内置了JSON数据类型,而9.4开始支持JSONB,标志着<span style=“color: yellow;">PostgreSQL实际上已经是一个关系型数据库和NoSQL数据库的结合体</span>。虽然PostgreSQL还定位在关系型数据库,但是<span style=“color: yellow;">近几次更新PostgreSQL的NoSQL性能飙升甚至超过MongoDB</span>。PostgreSQL安装这里以rpm的方式安装PostgreSQL 11# 下载rpm包yum install https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7-x86_64/pgdg-redhat11-11-2.noarch.rpm -y# 安装yum -y install postgresql11 postgresql11-server postgresql11-libs# 初始化数据库/usr/pgsql-11/bin/postgresql-11-setup initdb# 设置开机自启动PostgreSQL和启动服务systemctl enable postgresql-11systemctl start postgresql-11systemctl status postgresql-11## 看到控制台输出的Active后有Running的字样说明启动完成PostgreSQL连接# 登录数据库,这里切换账号postgressu - postgrespsql# Navicat连接PostgreSQL# 这里要修改配置文件postgresql.conffind / -name postgresql.confvi /var/lib/pgsql/11/data/postgresql.conf# 找到listen_address那里,解开注释并修改引号内localhost的值为listen_address=””# 保存并退出,重启postgresql服务systemctl restart postgresql-11# 阿里云安全组规则配置 -> 快速添加安全组规则 -> 选中PostgreSQL并添加# 在navicat连接,如果不修改localhost为*,navicat连接会提示错误“Connection Refuse”# 我在这里修改了postgres用户的密码,步骤如下:## 切换用户后进入psqlsu - postgrespsql## 修改密码alter user postgres password ‘密码’连接成功!至此,PostgreSQL搭建完成,Windows平台下的PostgreSQL搭建比较简单。接下来,学PostgreSQL! ...

April 10, 2019 · 1 min · jiezi

PostgreSQL查询表以及字段备注

查询所有表名称以及字段含义select c.relname 表名,cast(obj_description(relfilenode,‘pg_class’) as varchar) 名称,a.attname 字段,d.description 字段备注,concat_ws(’’,t.typname,SUBSTRING(format_type(a.atttypid,a.atttypmod) from ‘(.)’)) as 列类型 from pg_class c,pg_attribute a,pg_type t,pg_description dwhere a.attnum>0 and a.attrelid=c.oid and a.atttypid=t.oid and d.objoid=a.attrelid and d.objsubid=a.attnumand c.relname in (select tablename from pg_tables where schemaname=‘public’ and position(’_2’ in tablename)=0) order by c.relname,a.attnum查看所有表名select tablename from pg_tables where schemaname=‘public’ and position(’_2’ in tablename)=0;select * from pg_tables;查看表名和备注select relname as tabname,cast(obj_description(relfilenode,‘pg_class’) as varchar) as comment from pg_class cwhere relname in (select tablename from pg_tables where schemaname=‘public’ and position(’_2’ in tablename)=0);select * from pg_class;查看特定表名备注select relname as tabname,cast(obj_description(relfilenode,‘pg_class’) as varchar) as comment from pg_class c where relname =‘tbl_alarm’;查看特定表名字段select a.attnum,a.attname,concat_ws(’’,t.typname,SUBSTRING(format_type(a.atttypid,a.atttypmod) from ‘(.)’)) as type,d.description from pg_class c,pg_attribute a,pg_type t,pg_description dwhere c.relname=‘tbl_alarm’ and a.attnum>0 and a.attrelid=c.oid and a.atttypid=t.oid and d.objoid=a.attrelid and d.objsubid=a.attnum; ...

April 9, 2019 · 1 min · jiezi

linux 安装PostgreSQL

把最新的rpm包添加到系统库PostgreSQL会为所有的Linux平台发布rpm包, 而且会比其他的的库更新的更快.地址:postresSQL linuxrpm -Uvh https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7-x86_64/pgdg-centos11-11-2.noarch.rpm列出可用安装包yum list postgres安装PostgreSQLyum install -y postgresql11-server.x86_64初始化数据库/usr/pgsql-11/bin/postgresql-11-setup initdb 仅需执行一次启动PostgreSQLsystemctl start postgresql-11设置自启动systemctl enable postgresql-11查看运行状态systemctl status postgresql-11开机启动chkconfig postgresql-11 on重置密码1) sudo -u postgres psql2) ALTER USER postgres WITH PASSWORD ‘postgres’;3) 退出 \q开启远程访问vi /var/lib/pgsql/11/data/postgresql.conf修改#listen_addresses = ’localhost’ 为 listen_addresses=’’,建议只监听内网IP修改客户端认证配置文件pg_hba.confvi /var/lib/pgsql/11/data/pg_hba.conf将IPv4区下的127.0.0.1/32修改为0.0.0.0/0; 将ident修改为md5重启服务service postgresql-11 restart开放端口firewall-cmd –zone=public –add-port=5432/tcp –permanent重载防火墙firewall-cmd –reload

April 6, 2019 · 1 min · jiezi

Pick!闲鱼亿级商品库中的秒级实时选品

一、业务背景在电商运营工作中,营销活动是非常重要的部分,对用户增长和GMV都有很大帮助。对电商运营来说,如何从庞大的商品库中筛选出卖家优质商品并推送给有需要的买家购买是每时每刻都要思索的问题,而且这个过程需要尽可能快和实时。保证快和实时就可以提升买卖双方的用户体验,提高用户粘性。二、实时选品为了解决上面提到的问题,闲鱼研发了马赫系统。马赫是一个实时高性能的商品选品系统,解决在亿级别商品中通过规则筛选优质商品并进行投放的场景。有了马赫系统之后,闲鱼的运营同学可以在马赫系统上创建筛选规则,比如商品标题包含“小猪佩奇”、类目为“玩具”、价格不超过100元且商品状态为未卖出。在运营创建规则后,马赫系统会同时进行两步操作,第一步是从存量商品数据筛选符合条件的商品进行打标;第二步是对商品实时变更进行规则计算,实时同步规则命中结果。马赫系统最大的特点是快而实时,体现在命中规模为100w的规则可以在10分钟之内完成打标;商品本身变更导致的规则命中结果同步时间为1秒钟。运营可以通过马赫系统快速筛选商品向用户投放,闲鱼的流量也可以精准投给符合条件的商品并且将流量利用到最大化。那么马赫系统是如何解决这一典型的电商问题的呢,马赫系统和流计算有什么关系呢,这是下面要详细说明的部分。三、流计算流计算是持续、低延迟、事件触发的数据处理模型。流计算模型是使用实时数据集成工具,将数据实时变化传输到流式数据存储,此时数据的传输变成实时化,将长时间累积大量的数据平摊到每个时间点不停地小批量实时传输;流计算会将计算逻辑封装为常驻计算服务,一旦启动就一直处于等待事件触发状态,当有数据流入后会触发计算迅速得到结果;当流计算得到计算结果后可以立刻将数据输出,无需等待整体数据的计算结果。闲鱼实时选品系统使用的流计算框架是Blink,Blink是阿里巴巴基于开源流计算框架Flink定制研发的企业级流计算框架,可以认为是Flink的加强版,现在已经开源。Flink是一个高吞吐、低延迟的计算引擎,同时还提供很多高级功能。比如它提供有状态的计算,支持状态管理,支持强一致性的数据语义以及支持Event Time,WaterMark对消息乱序的处理等特性,为闲鱼实时选品系统的超低延时选品提供了有力支持。3.1、Blink之StateState是指流计算过程中计算节点的中间计算结果或元数据属性,比如在aggregation过程中要在state中记录中间聚合结果,比如Apache Kafka作为数据源时候,我们也要记录已经读取记录的offset,这些State数据在计算过程中会进行持久化(插入或更新)。所以Blink中的State就是与时间相关的,Blink任务的内部数据(计算数据和元数据属性)的快照。马赫系统会在State中保存商品合并之后的全部数据和规则运行结果数据。当商品发生变更后,马赫系统会将商品变更信息与State保存的商品信息进行合并,并将合并的信息作为入参运行所有规则,最后将规则运行结果与State保存的规则运行结果进行Diff后得到最终有效的运行结果。所以Blink的State特性是马赫系统依赖的关键特性。3.2、Blink之WindowBlink的Window特性特指流计算系统特有的数据分组方式,Window的创建是数据驱动的,也就是说,窗口是在属于此窗口的第一个元素到达时创建。当窗口结束时候删除窗口及状态数据。Blink的Window主要包括两种,分别为滚动窗口(Tumble)和滑动窗口(Hop)。滚动窗口有固定大小,在每个窗口结束时进行一次数据计算,也就是说滚动窗口任务每经过一次固定周期就会进行一次数据计算,例如每分钟计算一次总量。滑动窗口与滚动窗口类似,窗口有固定的size,与滚动窗口不同的是滑动窗口可以通过slide参数控制滑动窗口的新建频率。因此当slide值小于窗口size的值的时候多个滑动窗口会重叠,此时数据会被分配给多个窗口,如下图所示:Blink的Window特性在数据计算统计方面有很多使用场景,马赫系统主要使用窗口计算系统处理数据的实时速度和延时,用来进行数据统计和监控告警。3.3、Blink之UDXUDX是Blink中用户自定义函数,可以在任务中调用以实现一些定制逻辑。Blink的UDX包括三种,分别为:UDF - User-Defined Scalar FunctionUDF是最简单的自定义函数,输入是一行数据的任意字段,输出是一个字段,可以实现数据比较、数据转换等操作。UDTF - User-Defined Table-Valued FunctionUDTF 是表值函数,每个输入(单column或多column)返回N(N>=0)Row数据,Blink框架提供了少量的UDTF,比如:STRING_SPLIT,JSON_TUPLE和GENERATE_SERIES3个built-in的UDTF。UDAF - User-Defined Aggregate FunctionUDAF是聚合函数,输入是多行数据,输出是一个字段。Blink框架Built-in的UDAF包括MAX,MIN,AVG,SUM,COUNT等,基本满足了80%常用的集合场景,但仍有一定比例的复杂业务场景,需要定制自己的聚合函数。马赫系统中使用了大量的UDX进行逻辑定制,包括消息解析、数据处理等。而马赫系统最核心的商品数据合并、规则运行和结果Diff等流程就是通过UDAF实现的。四、秒级选品方案选品系统在项目立项后也设计有多套技术方案。经过多轮讨论后,最终决定对两套方案实施验证后决定最终实现方案。第一套方案是基于PostgreSQL的方案,PostgreSQL可以很便捷的定义Function进行数据合并操作,在PostgreSQL的trigger上定义执行规则逻辑。基于PostgreSQL的技术实现较复杂,但能满足功能需求。不过性能测试结果显示PostgreSQL处理小数据量(百万级)性能较好;当trigger数量多、trigger逻辑复杂或处理亿级别数据时,PostgreSQL的性能会有较大下滑,不能满足秒级选品的性能指标。因此基于PostgreSQL的方案被否决(在闲鱼小商品池场景中仍在使用)。第二套方案是基于Blink流计算方案,通过验证发现Blink SQL很适合用来表达数据处理逻辑而且Blink性能很好,综合对比之后最终选择Blink流计算方案作为实际实施的技术方案。为了配合使用流计算方案,马赫系统经过设计和解耦,无缝对接Blink计算引擎。其中数据处理模块是马赫系统核心功能模块,负责接入商品相关各类数据、校验数据、合并数据、执行规则和处理执行结果并输出等步骤,所以数据处理模块的处理速度和延时在很大程度上能代表马赫系统数据处理速度和延时。接下来我们看下数据处理模块如何与Blink深度结合将数据处理延迟降到秒级。数据处理模块结构如上图,包含数据接入层、数据合并层、规则运行层和规则运行结果处理层。每层都针对流计算处理模式进行了单独设计。4.1、数据接入层数据接入层是数据处理模块前置,负责对接多渠道各种类型的业务数据,主要逻辑如下:数据接入层对接多个渠道多种类型的业务数据;解析业务数据并做简单校验;统计各渠道业务数据量级并进行监控,包括总量和同比变化量;通过元数据中心获取字段级别的Metadata配置。元数据中心是用来保存和管理所有字段的MetaData配置信息组件。Metadata配置代表字段元数据配置,包括字段值类型,值范围和值格式等基础信息;根据Metadata配置进行字段级别数据校验;按照马赫定义的标准数据范式组装数据。这样设计的考虑是因为业务数据是多种多样的,比如商品信息包括数据库的商品表记录、商品变更的MQ消息和算法产生的离线数据,如果直接通过Blink对接这些业务数据源的话,需要创建多个Blink任务来对接不同类型业务数据源,这种处理方式太重,而且数据接入逻辑与Blink紧耦合,不够灵活。数据接入层可以很好的解决上述问题,数据接入层可以灵活接入多种业务数据,并且将数据接入与Blink解耦,最终通过同一个Topic发出消息。而Blink任务只要监听对应的Topic就可以连续不断的收到业务数据流,触发接下来的数据处理流程。4.2、数据合并层数据合并是数据处理流程的重要步骤,数据合并的主要作用是将商品的最新信息与内存中保存的商品信息合并供后续规则运行使用。数据合并主要逻辑是:监听指定消息队列Topic,获取业务数据消息;解析消息,并将消息内容按照字段重新组装数据,格式为{key:[timestamp, value]},key是字段名称,value是字段值,timestamp为字段数据产生时间戳;将组装后的数据和内存中保存的历史数据根据timestamp进行字段级别数据合并,合并算法为比较timestamp大小取最新字段值,具体逻辑见下图。数据合并有几个前提:内存可以保存存量数据;这个是Blink提供的特性,Blink可以将任务运行过程中产生的存量数据保存在内存中,在下一次运行时从内存中取出继续处理。合并后的数据能代表商品的最新状态;这点需要一个巧妙设计:商品信息有很多字段,每个字段的值是数组,不仅要记录实际值,还要记录当前值的修改时间戳。在合并商品信息时,按照字段进行合并,合并规则是取时间戳最大的值为准。举例来说,内存中保存的商品ID=1的信息是{“desc”: [1, “描述1”], “price”: [4, 100.5]},数据流中商品ID=1的信息是{“desc”: [2, “描述2”], “price”: [3, 99.5]},那么合并结果就是{“desc”: [2, “描述2”], “price”: [4, 100.5]},每个字段的值都是最新的,代表商品当前最新信息。当商品信息发生变化后,最新数据由数据接入层流入,通过数据合并层将数据合并到内存,Blink内存中保存的是商品当前最新的全部数据。4.3、规则运行层规则运行层是数据处理流程核心模块,通过规则运算得出商品对各规则命中结果,逻辑如下:规则运行层接受输入为经过数据合并后的数据;通过元数据中心获取字段级别Metadata配置;根据字段Metadata配置解析数据;通过规则中心获取有效规则列表,规则中心是指创建和管理规则生命周期的组件;循环规则列表,运行单项规则,将规则命中结果保存在内存;记录运行规则抛出异常的数据,并进行监控告警。这里的规则指的是运营创建的业务规则,比如商品价格大于50且状态为在线。规则的输入是经过数据合并后的商品数据,输出是true或false,即是否命中规则条件。规则代表的是业务投放场景,马赫系统的业务价值就是在商品发生变更后尽快判断是否命中之前未命中的规则或是不命中之前已经命中的规则,并将命中和不命中结果尽快体现到投放场景中。规则运行需利用Blink强大算力来保证快速执行,马赫系统当前有将近300条规则,而且还在快速增长。这意味着每个商品发生变更后要在Blink上运行成百上千条规则,闲鱼每天有上亿商品发生变更,这背后需要的运算量是非常惊人的。4.4、运行结果处理层读者读到这里可能会奇怪,明明经过规则运行之后直接把运行结果输出到投放场景就可以了,不需要运行结果处理层。实际上运行结果处理层是数据处理模块最重要的部分。因为在实际场景中,商品的变更在大部分情况只会命中很少一部分规则,而且命中结果也很少会变化。也就是说商品对很多规则的命中结果是没有意义的,如果将这些命中结果也输出的话,只会增加操作TPS,对实际结果没有任何帮助。而筛选出有效的运行结果,这就是运行结果处理层的作用。运行结果处理层逻辑如下:获取商品数据的规则运行结果;按照是否命中规则解析运行结果;将运行结果与内存中保存的历史运行结果进行diff,diff作用是排除新老结果中相同的命中子项,逻辑见下图。运行结果处理层利用Blink内存保存商品上一次变更后规则运行结果,并将当前变更后规则运行结果与内存中结果进行比较,计算出有效运行结果。举例来说,商品A上一次变更后规则命中结果为{“rule1”:true, “rule2”:true, “rule3”:false, “rule4”:false},当前变更后规则命中结果为{“rule1”:true, “rule2”:false, “rule3”:false, “rule4”:true}。因为商品A变更后对rule1和rule3的命中结果没有变化,所以实际有效的命中结果是{“rule2”:false, “rule4”:true},通过运行结果处理层处理后输出的是有效结果的最小集,可以极大减小无效结果输出,提高数据处理的整体性能和效率。4.5、难点解析虽然闲鱼实时选品系统在立项之初经过预研和论证,但因为使用很多新技术框架和流计算思路,在开发过程中遇到一些难题,包括设计和功能实现方面的,很多是设计流计算系统的典型问题。我们就其中一个问题与各位读者探讨-规则公式转换。4.5.1、规则公式转换这个问题的业务场景是:运营同学在马赫系统页面上筛选商品字段后保存规则,服务端是已有的老系统,逻辑是根据规则生成一段SQL,SQL的where条件和运营筛选条件相同。SQL有两方面的作用,一方面是作为离线规则,在离线数据库中执行SQL筛选符合规则的离线商品数据;另一方面是转换成在线规则,在Blink任务中对实时商品变更数据执行规则以判断是否命中。因为实时规则运行使用的是MVEL表达式引擎,MVEL表达式是类Java语法的,所以问题就是将离线规则的SQL转换成在线规则的Java表达式,两者逻辑需一致,并且需兼顾性能和效率。问题的解决方案很明确,解析SQL后将SQL操作符转换成Java操作符,并将SQL特有语法转成Java语法,例如A like ‘%test%‘转成A.contains(’test’)。这个问题的难点是如何解析SQL和将解析后的语义转成Java语句。经过调研之后给出了简单而优雅的解决方案,主要步骤如下:使用Druid框架解析SQL语句,转成一个二叉树,单独取出其中的where条件子树;通过后序遍历算法遍历where条件子树;将SQL操作符换成对应的Java操作符;目前支持且、或、等于、不等于、大于、大于等于、小于、小于等于、like、not like和in等操作。将SQL语法格式转成Java语法;将in语法改成Java的或语法,例如A in (‘hello’, ‘world’)转成(A == ‘hello’) || (A == ‘world’)。实际运行结果如下:代码逻辑如下(主要是二叉树后续遍历和操作符转换,不再详细解释):五、结论马赫系统上线以来,已经支持近400场活动和投放场景,每天处理近1.4亿条消息,峰值TPS达到50000。马赫系统已经成为闲鱼选品投放的重要支撑。本文主要阐述马赫系统中数据处理的具体设计方案,说明整体设计的来龙去脉。虽然闲鱼实时选品系统针对的是商品选品,但数据处理流计算技术方案的输入是MQ消息,输出也是MQ消息,不与具体业务绑定,所以数据处理流计算技术方案不只适用于商品选品,也适合其他类似实时筛选业务场景。希望我们的技术方案和设计思路能给你带来一些想法和思考,也欢迎和我们留言讨论,谢谢。参考资料闲鱼实时选品系统:https://mp.weixin.qq.com/s/8ROsZniYD7nIQssC14mn3wBlink:https://github.com/apache/flink/tree/blinkPostgreSQL:https://www.postgresql.org/druid:https://github.com/alibaba/druid本文作者:闲鱼技术-剑辛阅读原文本文为云栖社区原创内容,未经允许不得转载。

April 3, 2019 · 1 min · jiezi

卤蛋跌跌撞撞的入门之路之SQL按条件计数&按条件加和

背景本卤蛋小白一枚,刷题时被大家都说简单的SQL难住了,题目涉及同时按条件计数和按条件加和最后靠着PureWeber大大的解答解了出来。本解法还综合了其他帖子。所以本卤蛋打算来分享一下这道题,和一种思路。题目上图是了题干。简单概括如下:你有一个DVD租赁店的订单信息数据表。关键字段有:staff_id:员工工号;1是个叫Mike的家伙,2是一个叫Jon的家伙rental_id: 此处可以理解为订单编号amount: 支付金额?反正是要用于加和东西但算出来又不太像????的东西payment_date: 成交日期,只有07年一年的数据我们需要按月汇总这家店逐月的单量和总amount情况,同时我们也需要搞清楚Mike和Jon分别经手了多少订单,分别有多少amount。因此,这就是一个既要分条件计数又要分条件加和的问题。输出结果需要的字段如下:PS. 这个数据库运行在PostgreSQL 9.6下一种思路以下提供一种思路/https://www.pureweber.com/article/mysql-conditional-count//SELECT EXTRACT(month FROM payment_date) AS month, COUNT(rental_id) AS total_count, SUM(amount) AS total_amount, COUNT(CASE WHEN staff_id=1 THEN 1 ELSE NULL END) AS mike_count, SUM(CASE WHEN staff_id<>1 THEN NULL ELSE (amount) END) AS mike_amount, COUNT(CASE WHEN staff_id=2 THEN 1 ELSE NULL END) AS jon_count, SUM(CASE WHEN staff_id<>2 THEN NULL ELSE (amount) END) AS jon_amountFROM paymentGROUP BY monthORDER BY month这里的思路是:整体先按月汇总,然后具体列根据需要使用CASE…WHEN灵活处理;按照PureWeber大大的思路解决按条件计数不是难事,问题在于如何在不影响原值的情况下按条件加和;这里的方法参考了这个问答,使用括号带入应有的变量名;这个问答同时提醒我们为什么PureWeber在COUNT语句中使用了NULL,因为如果令为0确实是会计数的;SELECT后跟多个子查询应该也是可行的,就是麻烦,而且似乎显得略不优雅,因为涉及到需要多次提取月份信息重命名本卤蛋在抓狂的时候还查询了以下帖子:https://q.cnblogs.com/q/74846/ 感谢

March 25, 2019 · 1 min · jiezi

buzzfe 社交网站开发——(一)项目准备

BUZZFE信息社交网站开发过程记录本网站打算解决的问题 1. 如果我是文章作者, 是否能自己定制发布到首页的时间 2. 如果我是读者, 是否能逃离机器算法形成的信息茧房网站开发所使用的技术选型开发系统: manjaro开发语言: python3.7开发框架: django2.1.7开发工具: vscode数据库: postgresql, redis项目名称: buzzfe项目开发中所需的其他第三方库, 会在具体的应用开发中列出各种软件安装及配置在win10上安装vmware15 然后在虚拟机中安装 manjaromanjaro自带最新版python3.7创建python虚拟环境python -m venv venv/buzzfeenv进入虚拟环境,创建django工程source venv/buzzfeenv/bin/activate安装django2.1.7pip install django创建django工程django-admin startproject buzzfe将vscode中pythonpath 配置为刚刚创建的python虚拟环境"python.pythonPath": “/home/dpeng/app/venv/buzzfeenv/bin/python”,启动djangopython manage.py runserver打开浏览器, 输入 127.0.0.1:8000,你将看见 django 启动的默认页面使用github进行项目管理和版本控制注意 你需要在版本管理前 务必添加 .gitignore 可选添加 README.md 和 LICENSEgit add .git statusgit commit -m ‘第一次提交’git push -u origin master项目应用创建accountpython manage.py startapp accountarticlepython manage.py startapp articlebuzzfe项目配置settings使用django自带 auth.user, 需将account放置在第一个’account.apps.AccountConfig’,‘django.contrib.admin’,‘django.contrib.auth’,‘django.contrib.contenttypes’,‘django.contrib.sessions’,‘django.contrib.messages’,‘django.contrib.staticfiles’,‘article.apps.ArticleConfig’,时间及时区及语言设置TIME_ZONE = ‘Asia/Shanghai’USE_TZ = Falsetemplates设置’DIRS’: [os.path.join(BASE_DIR, ’templates’).replace(’\’, ‘/’),],postgresql 数据库配置DATABASES = { ‘default’: { ‘ENGINE’: ‘django.db.backends.postgresql’, ‘NAME’: ‘db_buzzfe’, ‘USER’: ‘db_admin’, ‘PASSWORD’: ‘db_mima’, }}static 静态文件配置STATIC_URL = ‘/static/‘STATICFILES_DIRS = ( os.path.join(BASE_DIR, “static”),)欲知项目开发后事如何,且等下回更新… ...

March 19, 2019 · 1 min · jiezi

关系型数据库中的事务管理详解:并发控制与事务日志

本文节选自:关系型数据库理论 https://url.wx-coder.cn/DJNQn ,涉及引用/整理的文章列举在了 Database-List。关系型数据库中的事务管理详解:并发控制与事务日志数据库系统的萌芽出现于 60 年代。当时计算机开始广泛地应用于数据管理,对数据的共享提出了越来越高的要求。传统的文件系统已经不能满足人们的需要。能够统一管理和共享数据的数据库管理系统(DBMS)应运而生。1961 年通用电气公司(General ElectricCo.)的 Charles Bachman 成功地开发出世界上第一个网状 DBMS 也是第一个数据库管理系统—— 集成数据存储(Integrated DataStore IDS),奠定了网状数据库的基础。1970 年,IBM 的研究员 E.F.Codd 博士在刊物 Communication of the ACM 上发表了一篇名为“A Relational Modelof Data for Large Shared Data Banks”的论文,提出了关系模型的概念,奠定了关系模型的理论基础。1974 年,IBM 的 Ray Boyce 和 DonChamberlin 将 Codd 关系数据库的 12 条准则的数学定义以简单的关键字语法表现出来,里程碑式地提出了 SQL(Structured Query Language)语言。在很长的时间内,关系数据库(如 MySQL 和 Oracle)对于开发任何类型的应用程序都是首选,巨石型架构也是应用程序开发的标准架构。本文即是对关系型数据库中的事务管理相关内容进行讨论。事务基础ACID事务提供一种全做,或不做(All or Nothing)的机制,即将一个活动涉及的所有操作纳入到一个不可分割的执行单元,组成事务的所有操作只有在所有操作均能正常执行的情况下方能提交,只要其中任一操作执行失败,都将导致整个事务的回滚。数据库事务具有 ACID 属性,即原子性(Atomic)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability),在分布式事务 https://url.wx-coder.cn/7p8Xx 中我们也会讨论分布式系统中应该如何实现事务机制。ACID 包含了描述事务操作的整体性的原子性,描述事务操作下数据的正确性的一致性,描述事务并发操作下数据的正确性的隔离性,描述事务对数据修改的可靠性的持久性。针对数据库的一系列操作提供了一种从失败状态恢复到正常状态的方法,使数据库在异常状态下也能够保持数据的一致性,且面对并发访问时,数据库能够提供一种隔离方法,避免彼此间的操作互相干扰。原子性(Atomicity):整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。例如:银行转账,从 A 账户转 100 元至 B 账户,分为两个步骤:从 A 账户取 100 元;存入 100 元至 B 账户。这两步要么一起完成,要么一起不完成。一致性(Consistency):在事务开始之前和事务结束以后,数据库数据的一致性约束没有被破坏;即当事务 A 与 B 同时运行,无论 A,B 两个事务的结束顺序如何,数据库都会达到统一的状态。隔离性(Isolation):数据库允许多个并发事务同时对数据进行读写和修改的能力,如果一个事务要访问的数据正在被另外一个事务修改,只要另外一个事务未提交,它所访问的数据就不受未提交事务的影响。隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。 例如:现有有个交易是从 A 账户转 100 元至 B 账户,在这个交易事务还未完成的情况下,如果此时 B 查询自己的账户,是看不到新增加的 100 元的。持久性(Durability):当某个事务一旦提交,无论数据库崩溃还是其他未知情况,该事务的结果都能够被持久化保存下来。隔离级别SQL 标准定义了 4 类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的。低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销。隔离级别脏读(Dirty Read )不可重复读(NonRepeatable Read )幻读(Phantom Read )未提交读(Read Uncommitted)可能可能可能提交读(Read Committed )不可能可能可能可重复读(Repeatable Read )不可能不可能可能可串行化(Serializable )不可能不可能不可能Read Uncommitted | 未提交读在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。读取未提交的数据,也被称之为脏读(Dirty Read)。Read Committed 提交读这是大多数数据库系统的默认隔离级别比如 Sql Server, Oracle 等,但不是 MySQL 默认的。它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变。这种隔离级别也支持所谓的不可重复读(Nonrepeatable Read),因为同一事务的其他实例在该实例处理其间可能会有新的 Commit,所以同一查询可能返回不同结果。Repeatable Read | 重复读当隔离级别设置为 Repeatable Read 时,可以避免不可重复读。不可重复读是指事务 T1 读取数据后,事务 T2 执行更新操作,使 T1 无法再现前一次读取结果。具体地讲,不可重复读包括三种情况:事务 T1 读取某一数据后,事务 T2 对其做了修改,当事务 T1 再次读该数据时,得到与前一次不同的值。例如,T1 读取 B=100 进行运算,T2 读取同一数据 B,对其进行修改后将 B=200 写回数据库。T1 为了对读取值校对重读 B,B 已为 200,与第一次读取值不一致。事务 T1 按一定条件从数据库中读取了某些数据记录后,事务 T2 删除了其中部分记录,当 T1 再次按相同条件读取数据时,发现某些记录神密地消失了。事务 T1 按一定条件从数据库中读取某些数据记录后,事务 T2 插入了一些记录,当 T1 再次按相同条件读取数据时,发现多了一些记录,也就是幻读。这是 MySQL 的默认事务隔离级别,它确保在一个事务内的相同查询条件的多次查询会看到同样的数据行,都是事务开始时的数据快照。虽然 Repeatable Read 避免了不可重复读,但还有可能出现幻读。简单说,就是当某个事务在读取某个范围内的记录时,另外的一个事务又在该范围内插入新的记录。在之前的事务在读取该范围的记录时,就会产生幻行,InnoDB 通过间隙锁(next-key locking)策略防止幻读的出现。Serializable | 序列化Serializable 是最高的事务隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。该隔离级别代价也花费最高,性能很低,一般很少使用,在该级别下,事务顺序执行,不仅可以避免脏读、不可重复读,还避免了幻读。并发控制并发控制旨在针对数据库中对事务并行的场景,保证 ACID 中的一致性(Consistency)与隔离性(Isolation)。假如所有的事务都仅进行数据读取,那么事务之间并不会有冲突;而一旦某个事务读取了正在被其他事务修改的数据或者两个事务修改了相同的数据,那么数据库就必须来保证事务之间的隔离,来避免某个事务因为未见最新的数据而造成的误操作。解决并发控制问题最理想的方式就是能够每当某个事务被创建或者停止的时候,监控所有事务的所有操作,判断是否存在冲突的事务,然后对冲突事务中的操作进行重排序以尽可能少地减少冲突,而后以特定的顺序运行这些操作。绝大部分数据库会采用锁(Locks)或者数据版本控制(Data Versioning)的方式来处理并发控制问题。数据库技术中主流的三种并发控制技术分别是: Multi-version Concurrency Control (MVCC), Strict Two-Phase Locking (S2PL), 以及 Optimistic Concurrency Control (OCC),每种技术也都有很多的变种。在 MVCC 中,每次写操作都会在旧的版本之上创建新的版本,并且会保留旧的版本。当某个事务需要读取数据时,数据库系统会从所有的版本中选取出符合该事务隔离级别要求的版本。MVCC 的最大优势在于读并不会阻塞写,写也不会阻塞读;而像 S2PL 这样的系统,写事务会事先获取到排他锁,从而会阻塞读事务。PostgreSQL 以及 Oracle 等 RDBMS 实际使用了所谓的 Snapshot Isolation(SI)这个 MVCC 技术的变种。Oracle 引入了额外的 Rollback Segments,当写入新的数据时,老版本的数据会被写入到 Rollback Segment 中,随后再被覆写到实际的数据块。PostgreSQL 则是使用了相对简单的实现方式,新的数据对象会被直接插入到关联的 Table Page 中;而在读取表数据的时候,PostgreSQL 会通过可见性检测规则(Visibility Check Rules)来选择合适的版本。锁管理器(Lock Manager)基于锁的方式基础理念为:如果某个事务需要数据,则对数据加锁,操作完毕后释放锁;如果过程中其他事务需要锁,则需要等到该事务释放数据锁,这种锁也就是所谓的排他锁(Exclusive Lock)。不过使用排他锁会带来极大的性能损耗,其会导致其他那些仅需要读取数据的事务也陷入等待。另一种加锁的方式称为共享锁(Shared Lock),当两个事务都声明读取数据 A 时,它们会分别给 A 添加共享锁;对于此事需要修改数据 A 的事务而言,它必须等待所有的共享锁释放完毕之后才能针对数据 A 添加排他锁。同样地,对于已经被设置了排他锁的数据,仅有读取请求的事务同样需要等到该排他锁被释放后才能添加共享锁。从锁定的数据范围锁粒度(Lock Granularity)来看分为:表锁:管理锁的开销最小,同时允许的并发量也最小的锁机制。MyIsam 存储引擎使用的锁机制。当要写入数据时,把整个表都锁上,此时其他读、写动作一律等待。在 MySql 中,除了 MyIsam 存储引擎使用这种锁策略外,MySql 本身也使用表锁来执行某些特定动作,比如 ALTER TABLE.行锁:可以支持最大并发的锁策略。InnoDB 和 Falcon 两种存储引擎都采用这种策略。锁管理器(Lock Manager)即负责分配与释放锁,大部分数据库是以哈希表的方式来存放持有锁以及等待锁的事务。在 MySQL 实战 https://url.wx-coder.cn/Tu5dq 中我们也讨论了如何触发锁机制,譬如查询加锁,select * from testlock where id=1 for update;,即查询时不允许更改,该语句在自动提交为 off 或事务中生效,相当于更改操作,模拟加锁;而更像类操作 update testlock name=name; 则是会自动加锁。同样的,参考并发编程导论 https://url.wx-coder.cn/Yagu8 中的讨论,只要存在锁的地方就会存在死锁(Deadlock)的可能性:在发生死锁的时候,锁管理器会根据一定的规则来选取应该终止或者被回滚的事务:根据是否能最小化需要被回滚的数据;根据事务发生的先后顺序;根据事务执行所需要的时间,以尽可能避免饥饿状态的出现;根据需要回滚的关联事务的数目;避免死锁,确保纯隔离的最简单方法是在事务开始时获取锁并在事务结束时释放锁。这意味着事务必须在启动之前等待其所有锁,并且在事务结束时释放事务持有的锁,这种方式会浪费很多时间来等待所有锁。实际的数据库,譬如 DB2 与 SQL Server 中往往采取两阶段锁协议(Two-Phase Locking Protocol),即将事务过程切分为两个阶段:Growing Phase: 该阶段仅可以获取锁,而不可以释放锁。Shrinking Phase: 该阶段仅可以释放锁,而不可以获取新的锁。该策略能够减少其他事务等待锁的时间,并且避免某个事务在中途修改了并不是它初次申请的数据。MVCC在并发编程导论 https://url.wx-coder.cn/Yagu8 中我们讨论了两种不同类型的锁:乐观锁(Optimistic Lock)与悲观锁(Pessimistic Lock),前文介绍的各种锁即是悲观锁,而 MVCC(Multiple Version Concurrency Control) 这样的基于数据版本的锁则是乐观锁,它能够保证读写操作之间不会相互阻塞:每个事务都可以在同一时间修改相同的数据;每个事务会保有其需要的数据副本;如果两个事务修改了相同的数据,那么仅有单个更改操作会被接收,另一个操作会被回滚或者重新执行。乐观锁,大多是基于数据版本(Version)记录机制实现。数据版本即为数据增加一个版本标识,在基于数据库表的版本解决方案中,一般是通过为数据库表增加一个 version 字段来实现。读取出数据时,将此版本号一同读出,之后更新时,对此版本号加一。此时,将提交数据的版本数据与数据库表对应记录的当前版本信息进行比对,如果提交的数据版本号大于数据库表当前版本号,则予以更新,否则认为是过期数据。而 PostgreSQL 中则是依赖于 txid 以及 Commit Log 结合而成的可见性检测机制来实现 MVCC,详情可以参考 PostgreSQL 架构机制 https://url.wx-coder.cn/SgRDQ 中关于并发控制相关的介绍。日志管理器(Log Manager)数据库事务由具体的 DBMS 系统来保障操作的原子性,同一个事务当中,如果有某个操作执行失败,则事务当中的所有操作都需要进行回滚,回到事务执行前的状态。导致事务失败的原因有很多,可能是因为修改不符合表的约束规则,也有可能是网络异常,甚至是存储介质故障等,而一旦事务失败,则需要对所有已作出的修改操作进行还原,使数据库的状态恢复到事务执行前的状态,以保障数据的一致性,使修改操作要么全部成功、要么全部失败,避免存在中间状态。访问磁盘中的数据往往速度较慢,换言之,内存中数据的访问速度还是远快于 SSD 中的数据访问速度。基于这个考量,基本上所有数据库引擎都尽可能地避免访问磁盘数据。并且无论数据库表还是数据库索引都被划分为了固定大小的数据页(譬如 8 KB)。当我们需要读取表或者索引中的数据时,关系型数据库会将磁盘中的数据页映射入存储缓冲区。当我们需要修改数据时,关系型数据库首先会修改内存页中的数据,然后利用 fsync 这样的同步工具将改变同步回磁盘中。不过一旦数据库突发崩溃,那么缓冲区中的数据也就丢失,最终打破了事务的持久性。另一个极端情况而言,我们也可以随时将数据写入到磁盘中,但是在崩溃的时候,很可能只写入了一半的数据,而打破了事务的原子性(Atomicity)。为了解决这个问题,我们可以采取以下两种方案:影子拷贝(Shadow Copies/Pages):每个事务会创建数据库的部分拷贝,然后针对这些拷贝进行操作。在发生异常的时候,这些拷贝会被移除;正常的情况下,数据库则会立刻将这个拷贝写入到磁盘然后移除老的数据块。事务日志(Transaction Log):所谓的事务日志即是独立的存储空间,在将数据写入真正的数据表之外,数据库都会将事务操作顺序写入到某个日志文件中。在实际情况下,Shadow Copies/Pages 会受到极大的磁盘限制,因此绝大部分数据库还是选择了以事务日志的方式。事务日志(Transaction Log)为了实现数据库状态的恢复,DBMS 系统通常需要维护事务日志以追踪事务中所有影响数据库数据的操作,以便执行失败时进行事务的回滚。以 MySQL 的 InnoDB 存储引擎为例,InnoDB 存储引擎通过预写事务日志的方式,来保障事务的原子性、一致性以及持久性。它包含 Redo 日志和 Undo 日志,Redo 日志在系统需要的时候,对事务操作进行重做,如当系统宕机重启后,能够对内存中还没有持久化到磁盘的数据进行恢复,而 Undo 日志,则能够在事务执行失败的时候,利用这些 Undo 信息,将数据还原到事务执行前的状态。事务日志可以提高事务执行的效率,存储引擎只需要将修改行为持久到事务日志当中,便可以只对该数据在内存中的拷贝进行修改,而不需要每次修改都将数据回写到磁盘。这样做的好处是,日志写入是一小块区域的顺序 I/O,而数据库数据的磁盘回写则是随机 I/O,磁头需要不停地移动来寻找需要更新数据的位置,无疑效率更低,通过事务日志的持久化,既保障了数据存储的可靠性,又提高了数据写入的效率。当某个事务需要去更改数据表中某一行时,未提交的改变会被写入到内存数据中,而之前的数据会被追加写入到 Undo Log 文件中。Oracle 或者 MySQL 中使用了所谓 Undo Log 数据结构,而 SQL Server 中则是使用 Transaction Log 完成此项工作。PostgreSQL 并没有 Undo Log,不过其内建支持所谓多版本的表数据,即同一行的数据可能同时存在多个版本。总而言之,任何关系型数据库都采用的类似的数据结构都是为了允许回滚以及数据的原子性。某个事务提交之后,内存中的改变就需要同步到磁盘中。不过并不是所有的事务提交都会立刻触发同步,过高频次的同步反而会对应用性能造成损伤。这里关系型数据库就是依靠 Redo Log 来达成这一点,它是一个仅允许追加写入的基于磁盘的数据结构,它会记录所有尚未执行同步的事务操作。相较于一次性写入固定数目的数据页到磁盘中,顺序地写入到 Redo Log 会比随机访问快上很多。因此,关于事务的 ACID 特性的保证与应用性能之间也就达成了较好的平衡。该数据结构在 Oracle 与 MySQL 中就是叫 Redo Log,而 SQL Server 中则是由 Transaction Log 执行,在 PostgreSQL 中则是使用 Write-Ahead Log(WAL)。下面我们继续回到上面的那个问题,应该在何时将内存中的数据写入到磁盘中。关系型数据库系统往往使用检查点来同步内存的脏数据页与磁盘中的对应部分。为了避免 IO 阻塞,同步过程往往需要等待较长的时间才能完成。因此,关系型数据库需要保证即使在所有内存脏页同步到磁盘之前引擎就崩溃的时候不会发生数据丢失。同样地,在每次数据库重启的时候,数据库引擎会基于 Redo Log 重构那些最后一次成功的检查点以来所有的内存数据页。WAL(Write-Ahead Logging)WAL 协议主要包含了以下三条规则:每个数据库中的修改操作都会产生一条记录,该记录必须在数据被写入到数据库之前被写入到日志文件中;所有的操作日志都必须严格按序记录,即如果 A 记录发生在 B 之前,那么 A 也必须在 B 之前被写入到日志中;在事务被提交之后,必须在日志写入成功之后才能回复事务处理成功。同样可以参考 PostgreSQL 架构机制 https://url.wx-coder.cn/SgRDQ 中有关于 WAL 的实例讨论。延伸阅读欢迎关注某熊的技术之路公众号或某熊的技术之路指北,让我们一起前行。 ...

March 11, 2019 · 2 min · jiezi

PostgreSQL 5.7. Schemas 笔记

PostgreSQL 5.7. Schemas 笔记https://www.postgresql.org/docs/9.4/ddl-schemas.htmlA database contains one or more named schemas, which in turn contain tables. Schemas also contain other kinds of named objects, including data types, functions, and operators. The same object name can be used in different schemas without conflict; for example, both schema1 and myschema can contain tables named mytable. Unlike databases, schemas are not rigidly separated: a user can access objects in any of the schemas in the database he is connected to, if he has privileges to do so.一个数据库包含多个schema, schema里包含tables, database 的下一层逻辑结构就是 schemaschema 也包括各种 objects, data types, functions, operators不同schem里的table名可以相同在创建一个新的 database 时, PostgreSQL 会自动为其创建一个 名为 public 的 schema。 如果未设置 search_path 变量,那 么 PostgreSQL 会将你创建的所有对象默认放入 public schema 中。_使用schema带来的好处允许多用户使用一个数据库而不会相互干扰, 数据隔离将数据库对象组织到逻辑组中以使其更易于管理第三方应用程序可以放在单独的模式中, 这样它们就不会与其他对象的名称冲突5.7.1. Creating a Schemacode example:CREATE SCHEMA myschema;访问schema的表schema.table实际上,更通用的语法database.schema.table在schema里创建表CREATE TABLE myschema.mytable ( …);删除空schemaDROP SCHEMA myschema;删除schema 并且也删除其中的对象DROP SCHEMA myschema CASCADE;为某个用户创建schemaCREATE SCHEMA schemaname AUTHORIZATION username;5.7.2. The Public Schema默认创建的表都在public schema里下面两条语句是等价的CREATE TABLE products ( … );CREATE TABLE public.products ( … );5.7.3. The Schema Search Path当执行类 似 SELECT * FROM dogs 这种语句时, PostgreSQL 是怎么知道要查的是哪个 schema 中的表 呢?可以加schema前缀解决, 也可以设置 search_path 变量解决查看SHOW search_path;search_path————– “$user”,publicPostgreSQL 有一个少为人知的系统变量叫作 user , 它代表了当前登录用户的名称。 执行 SELECT user 就能看到其名称。对于search_path 里的$user, 如果当前登录的角色是 doggy, 那么所有的查询都会优先去 doggy schema 中寻找目标表, 如果找不到才会去 public schema 下找设置新的schema倒search path里SET search_path TO myschema,public;这样 默认 创建访问 table 都在 myschema schema里 ...

March 4, 2019 · 1 min · jiezi

title: postGreSQL 插件 timescaleDB 安装使用 date: 2019-02-14 18:02:23

基本环境操作系统: centOS 7postGreSQL : 10timescaleDB : 1.0 +postGreSQL安装Centos7 安装Postgresql10.5和PostGIStimescaleDB 安装PostgreSQL 时序数据库插件 timescaleDB 部署实践 - PostGIS + timescaleDB => PG时空数据库 – 德哥官网安装文档:TimescaleDB Docs - InstallingtimescaleDB 设置TimescaleDB Docs - Setting up TimescaleDB实验 – 下载测试数据 wget https://timescaledata.blob.core.windows.net/datasets/weather_small.tar.gz wget https://timescaledata.blob.core.windows.net/datasets/weather_big.tar.gz – 创建数据库 create database weather; – 解压下载文件 tar -zxvf weather_small.tar.gz – 创建表结构 psql -U postgres -d weather < weather.sql – 导入数据 psql -U postgres -d weather -c “\COPY conditions FROM weather_small_conditions.csv CSV” psql -U postgres -d weather -c “\COPY locations FROM weather_small_locations.csv CSV” – 查询测试 SELECT * FROM conditions c ORDER BY time DESC LIMIT 10; SELECT time, c.device_id, location, trunc(temperature, 2) temperature, trunc(humidity, 2) humidity FROM conditions c INNER JOIN locations l ON c.device_id = l.device_id WHERE l.environment = ‘outside’ ORDER BY time DESC LIMIT 10; SELECT date_trunc(‘hour’, time) “hour”, trunc(avg(temperature), 2) avg_temp, trunc(min(temperature), 2) min_temp, trunc(max(temperature), 2) max_temp FROM conditions c WHERE c.device_id IN ( SELECT device_id FROM locations WHERE location LIKE ‘field-%’ ) GROUP BY “hour” ORDER BY “hour” ASC LIMIT 24;注释– 数据库启动systemctl start postgresql-10– 连接数据库psql– 创建数据库CREATE database weather_big;– 创建时序关系CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;– 导入数据psql -U postgres -d weather_big < weather.sqlpsql -U postgres -d weather_big -c “\COPY conditions FROM weather_big_conditions.csv CSV"psql -U postgres -d weather_big -c “\COPY locations FROM weather_big_locations.csv CSV"欢迎大家关注 http://pnunu.cn/ ...

February 15, 2019 · 1 min · jiezi

PostgreSQL 优化器代码概览

简介PostgreSQL 的开发源自上世纪80年代,它最初是 Michael Stonebraker 等人在美国国防部支持下创建的POSTGRE项目。上世纪末,Andrew Yu 等人在它上面搭建了第一个SQL Parser,这个版本称为Postgre95,也是加州大学伯克利分校版本的PostgreSQL的基石[1]。我们今天看到的 PostgreSQL 的优化器代码主要是 Tom Lane 在过去的20年间贡献的,令人惊讶的是这20年的改动都是持续一以贯之的,Tom Lane 本人也无愧于“开源软件十大杰出贡献者”的称号。但是从今天的视角,PostgreSQL 优化器不是一个好的实现,它用C语言实现,所以扩展性不好;它不是 Volcano 优化模型的[2],所以灵活性不好;它的很多优化复杂度很高(例如Join重排是System R[3]风格的动态规划算法),所以性能不好。无论如何,PostgreSQL 是优化器的优秀实现和创新源头(想象 Greenplum 和 ORCA 等一系列项目),它的一些优化手段和代码结构在今天仍然是值得借鉴的,包括:参数化路径,作用于indexed lookup join分区裁剪和并行优化强一致的cardinality estimation保证本文尝试快速地浏览一遍 PostgreSQL 优化器的代码,和现代优化器比较优缺点。大部分的 PostgreSQL 优化器代码来自于 https://github.com/postgres/p… 。 我们提到现代优化器主要指的是 Apache Calcite 和 ORCA。术语解释DatumQualPath关键数据结构查询__Query__: Parse Tree,优化器的输入__RangeTblEntry__: Parse Tree的一个节点,它描述了一个数据集的视图,这个数据集可能来源于某个子查询、Join、Values或任何一个简单关系代数表达式。Join实现需要把它的输入都表达为 RangeTblEntry (以下简称RTE)。执行计划__PlannedStmt__: 执行计划的顶层节点__PlannerInfo__: 优化器的上下文信息。它是一个树形结构,用parent_root变量指向父节点。一个Query包含一个或多个PlannerInfo,每次Join切分一次树节点。它包含RelOptInfo的指针。RelOptInfo: 优化器的核心数据结构,包含一个子查询的Path集合等信息。这个概念对应于ORCA的Group或Calcite中的Set。Path: 区别于Parser称Relational Expression为Node,Optimizer称优化时的关系代数为Path。Path是物理计划,它包含优化器对于单个关系代数的理解,包括并行度、PathKey和cost。PathKey: 排序属性。这个概念相当于Volcano中的Physical Property或Calcite中的Trait。因为 PostgreSQL 是单机数据库,仅用排序属性就可以表达所有算法的需求和实现特性。对于分布式数据库,通常还需要分布属性。主流程子查询上拉因为优化的单元(RelOptInfo)是子查询,合并子查询可以简化优化流程。关联的过程包括:pull_up_sublinks: 将可转换的 ANY/EXISTS 子句转换为 (anti-)semi-join 。一些优化器称这个过程为de-correlation。pull_up_subqueries: 将可上拉的子查询上拉到当前查询,删除原来的子查询。如果子查询是一个 Join ,这个操作相当于打平 binary join 到 multi join。EquivalenceClass解析Equivalence Class(EC)是 qual 的术语,它指代的是 expression 的等价性。例如,expressiona = b AND b = c则称 {a, b, c} 是一个EC。特别地,在 PostgreSQL 中,expressiona = b AND b = 5只生成简化的EC:{a = 5} {b = 5}EC是很关键的数据结构,它的应用场景包括:在 Join 时,EC用来决定 Join Key,它决定了 Outer Join 简化和PathKey设定在 Join 时决定 qual 穿越决定参数化路径的参数列表匹配主-外键约束,以便优化(Join的)cardinality estimationEC是一个树形结构,每个节点是一个EC,并链接到它合并的父节点上。考虑a = b AND b = c的例子,最后的EC tree表达为{a, b, c}|- {a, b}|- {b, c} 其中,每个EC内部的expression称为EquivalenceMember(EM)。生成 EC 的入口是 generate_base_implied_equalities ,它从 query_planner 调入。也就是说,EC是在规划Join的前一刻生成的,这个阶段解析EC的代价最小,但是也决定了EC只能应用于Join优化。Join重排(有关Join重排的背景知识可以参考我之前的文章 SQL优化器原理 - Join重排)make_rel_from_joinlist是Join重排的入口,当前版本的 PostgreSQL 有三种算法:你可以插入一个自定义的Join重排算法GEQO: Genetic Optimization (基因算法,或遗传算法[4]),是一种非穷举的最优化算法实现Standard:一个略微剪枝的动态规划算法。默认在12路及以上的复杂Join中会打开GEQO。可以在postgresql.conf中修改参数geqo = ongeqo_threshold = 12控制GEQO设定。现在让我们检查 Standard 算法。它的主入口在 join_search_one_level ,每次在已生成的局部计划的基础上:按EC检查未加入的Join input,加入到生成的局部计划,这个操作仅产生 Left-deep-tree从未加入局部计划的Join input里找到有EC的两个input,生成额外的局部计划,用于生成Bushy-tree如果当前层找不到任何EC关联,生成笛卡尔积。上述描述已经足够复杂,让我们总结一下 Standard 算法:Standard 算法仍然是一个穷举的动态规划算法它对 a-b/b-a 镜像去重,同时当EC存在时不考虑笛卡尔积,这些工程上的降级有效降低了搜索复杂度路径生成和动态规划如上所述,优化过程集中在对子查询(RelOptInfo)的重建过程,这可以理解为逻辑优化过程,这通常是跨关系代数操作符的、比较复杂的优化。事实上 PostgreSQL 也同步在做物理优化。物理优化就是将 Path 加入 RelOptInfo。考虑Join,物理优化的入口在 populate_joinrel_with_paths。对每个JoinRel(Join RelOptInfo),考虑:sort_inner_and_outer:两边排序的MergeJoin路径match_unsorted_outer:Null-generating side不排序路径,包括 MergeJoin 和 NestedLoopJoin 。hash_inner_and_outer:两边哈希的HashJoin路径。有趣的点是HashJoin路径(hash_inner_and_outer),顾名思义,它要求Join两边都计算哈希值。在生成Path过程中,需要计算两边的参数信息。例如A join B on A.x = B.y,对于A来说,x是参数,对于B是y。如果选定A作为Probe side,一旦B上有y的索引,每次x的probe将以参数的形式传递给y的索引。通过调用 get_joinrel_parampathinfo 来产生参数信息。路径生成的入口是add_path,每次生成路径,需要更新RelOptInfo的最佳路径和最小代价以便后续动态规划选择全局最优。流程图planner|- subquery_planner 迭代的子查询优化|- pull_up_sublinks de-correlation|- pull_up_subqueries 子查询上拉|- preprocess_expression Query/PlannerInfo 结构解析,常量折叠|- remove_useless_groupby_columns|- reduce_outer_joins Outer Join退化|- grouping_planner |- plan_set_operations SetOp优化 |- query_planner 子查询优化主入口 |- generate_base_implied_equalities 生成/合并EC |- make_one_rel Join优化入口 |- set_base_rel_pathlists 生成Join RelOptInfo列表 |- make_rel_from_joinlist Join重排和规划 |- standard_join_search 标准Join重排算法 |- join_search_one_level |- make_join_rel 生成JoinRel和对应的Path |- create_XXX_paths Grouping、window等其他expression优化讨论扩展性和灵活性首先,PostgreSQL 的优化器代码可以说非常复杂,这已经极大限制了它的扩展性和灵活性。如果看一眼这部分代码的更新日志,会发现里面的作者已经只有少数几个人。一部分扩展性限制是由编程语言带来的,因为C语言本身不容易扩展,这意味着大部分时候想要添加一个新的Node或Path变得很不容易,你需要定义一系列的数据结构、Cardinality Estimation逻辑、并行逻辑和Path解释逻辑。并没有类似interface这样的抽象指导你该怎么做。虽然,PostgreSQL 的代码已经写得非常工整,而且也有很多的文章告诉你该怎么做(比如 Introduction to Hacking PostgreSQL 和 The Internals of PostgreSQL)。另一部分扩展性限制是优化器本身的结构带来的。现代的优化器基本都是Volcano Model[2]的(例如SQL Server和Oracle,就像他们声称的那样),而 PostgreSQL 没有实现为 Volcano Model 这种 Generic purpose,pluggable 的形式。影响包括:无法做逻辑和物理优化的互操作。例如前文说到的,一个Join产生的EC必须和它紧跟的 RTE 结合才能产生 IndexedLookupJoin,而不像其他优化器可以把这个 EC (它在某种意义上已经是物理计划)下推到合适的逻辑计划上,指导它做物理计划转换。不容易定制优化规则。开发者关注的切片太大,开发一个优化规则除了关注优化本身,不得不学习其他优化规则的数据结构、动态规划更新、RelOptInfo新建和清理,甚至内存分配本身。PostgreSQL 仍然提供了部分手写的 Plugin Point,包括:可定制的Join重排算法可定制的PathKey生成算法定制的Join Path生成算法等等。性能虽然没有实验,但是 PostgreSQL 在优化上的性能可以想像是比较好的,这很大程度是用灵活性交换来的。首先,不像 Volcano Optimizer ,PostgreSQL 优化器不需要不断生成中间节点,它的 RelOptInfo 的数量是相对稳定的(约等于Join的数量)。它的最优计划搜索以 RelOptInfo 为单位,如果 Join 重排不产生大量 RelOptInfo ,搜索宽度很低。其次,RelOptInfo 简化了大量跨 Relational Expression 优化的细节,比起 Calcite 这种按 Relational Expression 来组织等价路径集合的方案, 它的搜索宽度进一步降低了。从等价集合的数量看, PostgreSQL 的搜索宽度大概比 Calcite 要低一个数量级,当然,如上所述,这是用更多优化可能性作为交换的。最后,PostgreSQL 在优化阶段糅合了很多业务逻辑,在提高代码阅读的难度同时,也相应加快的优化效率。在优化过程中,PostgreSQL会不间断地做常量折叠、PathKey去重、Union打平、子查询打平……这些操作不会应用在memo里。对比 Calcite/Orca ,PostgreSQL 的优化更快,更适合事务性场景。不过我无法判断 Calcite/Orca 在做了适当的剪枝和优化规则糅合后,是否也能支持事务场景。本文作者:少杰阅读原文本文为云栖社区原创内容,未经允许不得转载。 ...

February 14, 2019 · 2 min · jiezi

深入解析 PostgreSQL 系列之并发控制与事务机制

深入解析 PostgreSQL 系列整理自 The Internals of PostgreSQL 等系列文章,从碎片化地阅读到体系化地学习,感觉对数据库有了更深入地了解;触类旁通,相互印证,也是有利于掌握 MySQL 等其他的关系型数据库或者 NoSQL 数据库。深入解析 PostgreSQL 系列之并发控制与事务机制并发控制旨在针对数据库中对事务并行的场景,保证 ACID 中的一致性(Consistency)与隔离(Isolation)。数据库技术中主流的三种并发控制技术分别是: Multi-version Concurrency Control (MVCC), Strict Two-Phase Locking (S2PL), 以及 Optimistic Concurrency Control (OCC),每种技术也都有很多的变种。在 MVCC 中,每次写操作都会在旧的版本之上创建新的版本,并且会保留旧的版本。当某个事务需要读取数据时,数据库系统会从所有的版本中选取出符合该事务隔离级别要求的版本。MVCC 的最大优势在于读并不会阻塞写,写也不会阻塞读;而像 S2PL 这样的系统,写事务会事先获取到排他锁,从而会阻塞读事务。PostgreSQL 以及 Oracle 等 RDBMS 实际使用了所谓的 Snapshot Isolation(SI)这个 MVCC 技术的变种。Oracle 引入了额外的 Rollback Segments,当写入新的数据时,老版本的数据会被写入到 Rollback Segment 中,随后再被覆写到实际的数据块。PostgreSQL 则是使用了相对简单的实现方式,新的数据对象会被直接插入到关联的 Table Page 中;而在读取表数据的时候,PostgreSQL 会通过可见性检测规则(Visibility Check Rules)来选择合适的版本。SI 能够避免 ANSI SQL-92 标准中定义的三个反常现象:脏读(Dirty Reads),不可重复读(Non-Repeatable Reads)以及幻读(Phantom Reads);在 9.1 版本后引入的 Serializable Snapshot Isolation(SSI)则能够提供真正的顺序读写的能力。Isolation LevelDirty ReadsNon-repeatable ReadPhantom ReadSerialization AnomalyREAD COMMITTEDNot possiblePossiblePossiblePossibleREPEATABLE READNot possibleNot possibleNot possible in PG; See Section 5.7.2. (Possible in ANSI SQL)PossibleSERIALIZABLENot possibleNot possibleNot possibleNot possibleTuple 结构Transaction ID当某个事务开启时,PostgreSQL 内置的 Transaction Manager 会为它分配唯一的 Transaction ID(txid);txid 是 32 位无类型整型值,可以通过 txid_current() 函数来获取当前的 txid:testdb=# BEGIN;BEGINtestdb=# SELECT txid_current(); txid_current————– 100(1 row)PostgreSQL 还保留了三个关键 txid 值作特殊标记:0 表示无效的 txid,1 表示启动时的 txid,仅在 Database Cluster 启动时使用;2 代表了被冻结的(Frozen)txid,用于在序列化事务时候使用。PostgreSQL 选择数值类型作为 txid,也是为了方便进行比较;对于 txid 值为 100 的事务而言,所有小于 100 的事务是发生在过去的,可见的;而所有大于 100 的事务,是发生在未来,即不可见的。鉴于实际系统中的 txid 数目的需要可能会超过最大值,PostgreSQL 实际是将这些 txid 作为环来看待。HeapTupleHeaderDataTable Pages 中的 Heap Tuples 往往包含三个部分:HeapTupleHeaderData 结构,NULL bitmap 以及用户数据。其中 HeapTupleHeaderData 与事物处理强相关的属性有:(TransactionId)t_xmin: 存放插入该 Tuple 时的 txid(TransactionId)t_xmax: 存放删除或者更新该 Tuple 时的 txid,如果还没更新或者删除,那么置 0,表示无效(CommandId)t_cid: 存放 Command ID,即 创建该 Tuple 的命令在该事务内执行的所有 SQL 命令中的编号;譬如 BEGIN; INSERT; INSERT; INSERT; COMMIT; 这个事务,如果是首个 INSERT 命令创建的 Tuple,那么其 t_cid 值为 0,第二个就是 1(ItemPointerData)t_ctid: 当某个 Tuple 更新时,该值就指向新创建的 Tuple,否则指向自己Tuple 的插入、删除与更新如上所述,Table Pages 中的 Tuples 呈如下布局:插入在执行插入操作时,PostgreSQL 会直接将某个新的 Tuple 插入到目标表的某个页中:假如某个 txid 为 99 的事务插入了新的 Tuple,那么该 Tuple 的头域会被设置为如下值:t_xmin 与创建该 Tuple 的事务的 txid 保持一致,即 99t_xmax 被设置为 0,因为其还未被删除或者更新t_cid 被设置为 0,因为该 Tuple 是由事务中的首个 Insert 命令创建的t_ctid 被设置为了 (0, 1),即指向了自己testdb=# CREATE EXTENSION pageinspect;CREATE EXTENSIONtestdb=# CREATE TABLE tbl (data text);CREATE TABLEtestdb=# INSERT INTO tbl VALUES(‘A’);INSERT 0 1testdb=# SELECT lp as tuple, t_xmin, t_xmax, t_field3 as t_cid, t_ctid FROM heap_page_items(get_raw_page(’tbl’, 0)); tuple | t_xmin | t_xmax | t_cid | t_ctid——-+——–+——–+——-+——– 1 | 99 | 0 | 0 | (0,1)删除在删除操作中,目标 Tuple 会被先逻辑删除,即将 t_xmax 的值设置为当前删除该 Tuple 的事务的 txid 值。当该事务被提交之后,PostgreSQL 会将该 Tuple 标记为 Dead Tuple,并随后在 VACUUM 处理过程中被彻底清除。更新在更新操作时,PostgreSQL 会首先逻辑删除最新的 Tuple,然后插入新的 Tuple:上图所示的行被 txid 为 99 的事务插入,被 txid 为 100 的事务连续更新两次;在该事务提交之后,Tuple_2 与 Tuple_3 就会被标记为 Dead Tuples。Free Space Map当插入某个 Heap Tuple 或者 Index Tuple 时,PostgreSQL 使用相关表的 FSM 来决定应该选择哪个 Page 来进行具体的插入操作。每个 FSM 都存放着表或者索引文件相关的剩余空间容量的信息,可以使用如下方式查看:testdb=# CREATE EXTENSION pg_freespacemap;CREATE EXTENSIONtestdb=# SELECT , round(100 * avail/8192 ,2) as “freespace ratio” FROM pg_freespace(‘accounts’); blkno | avail | freespace ratio——-+——-+—————– 0 | 7904 | 96.00 1 | 7520 | 91.00 2 | 7136 | 87.00 3 | 7136 | 87.00 4 | 7136 | 87.00 5 | 7136 | 87.00….Commit LogPostgreSQL 使用 Commit Log,亦称 clog 来存放事务的状态;clog 存放于 Shared Memory 中,在整个事务处理的生命周期中都起到了重要的作用。PostgreSQL 定义了四种不同的事务状态:IN_PROGRESS, COMMITTED, ABORTED, 以及 SUB_COMMITTED。Clog 有 Shared Memory 中多个 8KB 大小的页构成,其逻辑上表现为类数组结构,数组下标即是关联的事务的 txid,而值就是当前事务的状态:如果当前的 txid 超过了当前 clog 页可承载的最大范围,那么 PostgreSQL 会自动创建新页。而在 PostgreSQL 停止或者 Checkpoint 进程运行的时候,clog 的数据会被持久化存储到 pg_xact 子目录下,以 0000,0001 依次顺序命名,单个文件的最大尺寸为 256KB。而当 PostgreSQL 重启的时候,存放在 pg_xact 目录下的文件会被重新加载到内存中。而随着 PostgreSQL 的持续运行,clog 中势必会累计很多的过时或者无用的数据,Vacuum 处理过程中同样会清除这些无用的数据。Transaction Snapshot | 事务快照事务快照即是存放了当前全部事务是否为激活状态信息的数据结构,PostgreSQL 内部将快照表示为简单的文本结构,xmin:xmax:xip_list’;譬如 “100”,其意味着所有 txid 小于或者等于 99 的事务是非激活状态,而大于等于 100 的事务是处在了激活状态。testdb=# SELECT txid_current_snapshot(); txid_current_snapshot———————– 100:104:100,102(1 row)xmin: 最早的仍处在激活状态的 txid,所有更早之前的事务要么处于被提交之后的可见态,要么就是被回滚之后的假死态。xmax: 首个至今仍未分配的事务编号,所有 txid 大于或者等于该值的事务,相对于该快照归属的事务都是尚未发生的,因此是不可见的。xip_list: 快照时候处于激活状态的 txids,仅会包含在 xmin 与 xmax 之间的 txids。以 100:104:100,102 为例,其示意图如下所示:事务快照主要由事务管理器(Transaction Manager)提供,在 READ COMMITTED 这个隔离级别,无论是否有 SQL 命令执行,该事务都会被分配到某个快照;而对于 REPEATABLE READ 或者 SERIALIZABLE 隔离级别的事务而言,仅当首个 SQL 语句被执行的时候,才会被分配到某个事务快照用于进行可见性检测。事务快照的意义在于,当某个快照进行可见性判断时,无论目标事务是否已经被提交或者放弃,只要他在快照中被标记为 Active,那么其就会被当做 IN_PROGRESS 状态的事务来处理。事务管理器始终保存有关当前运行的事务的信息。假设三个事务一个接一个地开始,并且 Transaction_A 和 Transaction_B 的隔离级别是 READ COMMITTED,Transaction_C 的隔离级别是 REPEATABLE READ。T1:Transaction_A 启动并执行第一个 SELECT 命令。执行第一个命令时,Transaction_A 请求此刻的 txid 和快照。在这种情况下,事务管理器分配 txid 200,并返回事务快照'200:200:’。T2:Transaction_B 启动并执行第一个 SELECT 命令。事务管理器分配 txid 201,并返回事务快照'200:200:’,因为 Transaction_A(txid 200)正在进行中。因此,无法从 Transaction_B 中看到 Transaction_A。T3:Transaction_C 启动并执行第一个 SELECT 命令。事务管理器分配 txid 202,并返回事务快照'200:200:’,因此,Transaction_A 和 Transaction_B 不能从 Transaction_C 中看到。T4:Transaction_A 已提交。事务管理器删除有关此事务的信息。T5:Transaction_B 和 Transaction_C 执行各自的 SELECT 命令。Transaction_B 需要事务快照,因为它处于 READ COMMITTED 级别。在这种情况下,Transaction_B 获取新快照'201:201:’,因为 Transaction_A(txid 200)已提交。因此,Transaction_B 不再是 Transaction_B 中不可见的。Transaction_C 不需要事务快照,因为它处于 REPEATABLE READ 级别并使用获得的快照,即'200:200:’。因此,Transaction_A 仍然是 Transaction_C 不可见的。Visibility Check | 可见性检测Rules | 可见性检测规则可见性检测的规则用于根据 Tuple 的 t_xmin 与 t_xmax,clog 以及自身分配到的事务快照来决定某个 Tuple 相对于某个事务是否可见。t_xmin 对应事务的状态为 ABORTED当某个 Tuple 的 t_xmin 值对应的事务的状态为 ABORTED 时候,该 Tuple 永远是不可见的:/ t_xmin status = ABORTED /// Rule 1: If Status(t_xmin) = ABORTED ⇒ InvisibleRule 1: IF t_xmin status is ‘ABORTED’ THEN RETURN ‘Invisible’ END IFt_xmin 对应事务的状态为 IN_PROGRESS对于非插入该 Tuple 的事务之外的其他事务关联的 Tuple 而言,该 Tuple 永远是不可见的;仅对于与该 Tuple 同属一事务的 Tuple 可见(此时该 Tuple 未被删除或者更新的)。 / t_xmin status = IN_PROGRESS / IF t_xmin status is ‘IN_PROGRESS’ THEN IF t_xmin = current_txid THEN// Rule 2: If Status(t_xmin) = IN_PROGRESS ∧ t_xmin = current_txid ∧ t_xmax = INVAILD ⇒ VisibleRule 2: IF t_xmax = INVALID THEN RETURN ‘Visible’// Rule 3: If Status(t_xmin) = IN_PROGRESS ∧ t_xmin = current_txid ∧ t_xmax ≠ INVAILD ⇒ InvisibleRule 3: ELSE / this tuple has been deleted or updated by the current transaction itself. / RETURN ‘Invisible’ END IF// Rule 4: If Status(t_xmin) = IN_PROGRESS ∧ t_xmin ≠ current_txid ⇒ InvisibleRule 4: ELSE / t_xmin ≠ current_txid / RETURN ‘Invisible’ END IF END IFt_xmin 对应事务的状态为 COMMITTED此时该 Tuple 在大部分情况下都是可见的,除了该 Tuple 被更新或者删除。 / t_xmin status = COMMITTED / IF t_xmin status is ‘COMMITTED’ THEN// If Status(t_xmin) = COMMITTED ∧ Snapshot(t_xmin) = active ⇒ InvisibleRule 5: IF t_xmin is active in the obtained transaction snapshot THEN RETURN ‘Invisible’// If Status(t_xmin) = COMMITTED ∧ (t_xmax = INVALID ∨ Status(t_xmax) = ABORTED) ⇒ VisibleRule 6: ELSE IF t_xmax = INVALID OR status of t_xmax is ‘ABORTED’ THEN RETURN ‘Visible’ ELSE IF t_xmax status is ‘IN_PROGRESS’ THEN// If Status(t_xmin) = COMMITTED ∧ Status(t_xmax) = IN_PROGRESS ∧ t_xmax = current_txid ⇒ InvisibleRule 7: IF t_xmax = current_txid THEN RETURN ‘Invisible’// If Status(t_xmin) = COMMITTED ∧ Status(t_xmax) = IN_PROGRESS ∧ t_xmax ≠ current_txid ⇒ VisibleRule 8: ELSE / t_xmax ≠ current_txid / RETURN ‘Visible’ END IF ELSE IF t_xmax status is ‘COMMITTED’ THEN// If Status(t_xmin) = COMMITTED ∧ Status(t_xmax) = COMMITTED ∧ Snapshot(t_xmax) = active ⇒ VisibleRule 9: IF t_xmax is active in the obtained transaction snapshot THEN RETURN ‘Visible’// If Status(t_xmin) = COMMITTED ∧ Status(t_xmax) = COMMITTED ∧ Snapshot(t_xmax) ≠ active ⇒ InvisibleRule 10: ELSE RETURN ‘Invisible’ END IF END IF END IF可见性检测流程以简单的双事务更新与查询为例:上图中 txid 200 的事务的隔离级别是 READ COMMITED,txid 201 的隔离级别为 READ COMMITED 或者 REPEATABLE READ。当在 T3 时刻执行 SELECT 命令时:根据 Rule 6,此时仅有 Tuple_1 是处于可见状态:# Rule6(Tuple_1) ⇒ Status(t_xmin:199) = COMMITTED ∧ t_xmax = INVALID ⇒ Visibletestdb=# – txid 200testdb=# SELECT * FROM tbl; name——– Jekyll(1 row)testdb=# – txid 201testdb=# SELECT * FROM tbl; name——– Jekyll(1 row)当在 T5 时刻执行 SELECT 命令时:对于 txid 200 的事务而言,根据 Rule 7 与 Rule 2 可知,Tuple_1 可见而 Tuple_2 不可见:# Rule7(Tuple_1): Status(t_xmin:199) = COMMITTED ∧ Status(t_xmax:200) = IN_PROGRESS ∧ t_xmax:200 = current_txid:200 ⇒ Invisible# Rule2(Tuple_2): Status(t_xmin:200) = IN_PROGRESS ∧ t_xmin:200 = current_txid:200 ∧ t_xmax = INVAILD ⇒ Visibletestdb=# – txid 200testdb=# SELECT * FROM tbl; name—— Hyde(1 row)而对于 txid 201 的事务而言,Tuple_1 是可见的,Tuple_2 是不可见的:# Rule8(Tuple_1): Status(t_xmin:199) = COMMITTED ∧ Status(t_xmax:200) = IN_PROGRESS ∧ t_xmax:200 ≠ current_txid:201 ⇒ Visible# Rule4(Tuple_2): Status(t_xmin:200) = IN_PROGRESS ∧ t_xmin:200 ≠ current_txid:201 ⇒ Invisibletestdb=# – txid 201testdb=# SELECT * FROM tbl; name——– Jekyll(1 row)当在 T7 时刻执行 SELECT 命令时:如果此时 txid 201 的事务处于 READ COMMITED 的隔离级别,那么 txid 200 会被当做 COMMITTED 来处理,因为此时获取到的事务快照是 201:201:,因此 Tuple_1 是不可见的,而 Tuple_2 是可见的:# Rule10(Tuple_1): Status(t_xmin:199) = COMMITTED ∧ Status(t_xmax:200) = COMMITTED ∧ Snapshot(t_xmax:200) ≠ active ⇒ Invisible# Rule6(Tuple_2): Status(t_xmin:200) = COMMITTED ∧ t_xmax = INVALID ⇒ Visibletestdb=# – txid 201 (READ COMMITTED)testdb=# SELECT * FROM tbl; name—— Hyde(1 row)如果此时 txid 201 的事务处于 REPEATABLE READ 的隔离级别,此时获取到的事务快照还是 200:200:,那么 txid 200 的事务必须被当做 IN_PROGRESS 状态来处理;因此此时 Tuple_1 是可见的,而 Tuple_2 是不可见的:# Rule9(Tuple_1): Status(t_xmin:199) = COMMITTED ∧ Status(t_xmax:200) = COMMITTED ∧ Snapshot(t_xmax:200) = active ⇒ Visible# Rule5(Tuple_2): Status(t_xmin:200) = COMMITTED ∧ Snapshot(t_xmin:200) = active ⇒ Invisibletestdb=# – txid 201 (REPEATABLE READ)testdb=# SELECT * FROM tbl; name——– Jekyll(1 row)Preventing Lost Updates | 避免更新丢失所谓的 更新丢失(Lost Update),也就是写冲突(ww-conflict),其出现在两个事务同时更新相同的行;在 PostgreSQL 中,REPEATABLE READ 与 SERIALIZABLE 这两个级别都需要规避这种异常现象。(1) FOR each row that will be updated by this UPDATE command(2) WHILE true / The First Block /(3) IF the target row is being updated THEN(4) WAIT for the termination of the transaction that updated the target row(5) IF (the status of the terminated transaction is COMMITTED) AND (the isolation level of this transaction is REPEATABLE READ or SERIALIZABLE) THEN(6) ABORT this transaction / First-Updater-Win / ELSE(7) GOTO step (2) END IF / The Second Block /(8) ELSE IF the target row has been updated by another concurrent transaction THEN(9) IF (the isolation level of this transaction is READ COMMITTED THEN(10) UPDATE the target row ELSE(11) ABORT this transaction / First-Updater-Win / END IF / The Third Block / ELSE / The target row is not yet modified or has been updated by a terminated transaction. */(12) UPDATE the target row END IF END WHILE END FOR在上述流程中,UPDATE 命令会遍历每个待更新行,当发现该行正在被其他事务更新时进入等待状态直到该行被解除锁定。如果该行已经被更新,并且隔离级别为 REPEATABLE 或者 SERIALIZABLE,则放弃更新。Being updated 意味着该行由另一个并发事务更新,并且其事务尚未终止。因为 PostgreSQL 的 SI 使用 first-updater-win 方案, 在这种情况下,当前事务必须等待更新目标行的事务的终止。假设事务 Tx_A 和 Tx_B 同时运行,并且 Tx_B 尝试更新行;但是 Tx_A 已更新它并且仍在进行中,Tx_B 等待 Tx_A 的终止。在更新目标行提交的事务之后,继续当前事务的更新操作。 如果当前事务处于 READ COMMITTED 级别,则将更新目标行; 否则 REPEATABLE READ 或 SERIALIZABLE,当前事务立即中止以防止丢失更新。空间整理PostgreSQL 的并发控制机制还依赖于以下的维护流程:移除那些被标记为 Dead 的 Tuples 与 Index Tuples移除 clog 中过时的部分冻结旧的 txids更新 FSM,VM 以及其他统计信息首先讨论下 txid 环绕式处理的问题,假设 txid 100 的事务插入了某个 Tuple_1,则该 Tuple 对应的 t_xmin 值为 100;而后服务器又运行了许久,Tuple_1 期间并未被改变。直到 txid 为 2^31 + 101 时,对于该事务而言,其执行 SELECT 命令时,是无法看到 Tuple_1 的 ,因为 txid 为 100 的事务相对于其是发生在未来的,由其创建的 Tuple 自然也就是不可见的。为了解决这个问题,PostgreSQL 引入了所谓的 frozen txid(被冻结的 txid),并且设置了 FREEZE 进程来具体处理该问题。前文提及到 txid 2 是保留值,专门表征那些被冻结的 Tuple,这些 Tuple 永远是非激活的、可见的。FREEZE 进程同样由 Vacuum 进程统一调用,它会扫描所有的表文件,将那些与当前 txid 差值超过 vacuum_freeze_min_age 定义的 Tuple 的 t_xmin 域设置为 2。在 9.4 版本之后,则是将 t_infomask 域中的 XMIN_FROZEN 位设置来表征该 Tuple 为冻结状态。延伸阅读如果希望深入浅出 分布式系统,分布式计算,分布式存储,数据库,操作系统,虚拟化 等内容,可以参阅 深入浅出分布式基础架构, DistributedSystem CheatSheet, Database CheatSheet, Linux CheatSheet, MySQL CheatSheet, Docker CheatSheet, Flink CheatSheet, Kafka CheatSheet 等。如果想获取分布式系统、虚拟化调度、数据库、分布式存储、分布式计算、操作系统等领域更多资料: Docker List, Kubernetes List, Linux List, HTTP List, Distributed System List, Blockchain List, Flink List, Kafka List, Database List, MySQL List, PostgreSQL List, etc. ...

January 31, 2019 · 7 min · jiezi