阿里云云原生数据库PolarDB PostgreSQL版完全使用指南与SQL语法精解

apphuang2026年06月25日 14:39:4922

一、PolarDB PostgreSQL版产品概述

阿里云云原生数据库PolarDB PostgreSQL版(兼容Oracle)是阿里云自主研发的新一代云原生关系型数据库产品。该版本在100%兼容原生PostgreSQL的基础上,提供了对Oracle语法的高度兼容能力,支持存储过程、函数、触发器、分区表、序列、同义词等核心Oracle特性,帮助Oracle用户以极低的改造成本平滑迁移上云。

PolarDB PostgreSQL版的核心优势可以归纳为以下几个维度。在兼容性方面,它兼容Oracle 11g与12c的主流语法,支持95%以上的Oracle SQL语句与PL/SQL代码,使得存量Oracle应用无需大规模改造即可直接运行。在弹性方面,计算节点支持秒级扩缩容,存储按需自动扩容,还提供了Serverless自动弹性能力,能够完美适配业务流量的波峰波谷变化。在性能方面,共享存储架构支持多节点读写分离,可承载百万级QPS并发访问,响应延迟控制在毫秒级。在可靠性方面,数据多副本强一致性保障,自动故障转移的RTO小于30秒,确保了业务的连续性。在成本方面,支持按量付费与包年包月两种灵活计费模式,无需自建机房与硬件维护,显著降低了总体拥有成本。

二、技术架构深度解析

2.1 计算存储分离的Shared Everything架构

PolarDB PostgreSQL版采用计算与存储分离的架构设计,其核心是Shared Everything架构。数据库的数据文件和Redo log等日志文件统一存放在共享存储设备上,主节点和所有只读副本共享同一份全量数据和增量日志数据。节点之间只需要同步内存里的元数据信息,通过MVCC机制的保障,即可支持跨节点读取数据的一致性。这一设计从根本上解决了传统主从架构中主实例和副本之间的数据同步难题,大幅节约了跨节点的网络开销,显著降低了副本间的同步延迟。

在存储层的具体实现上,PolarDB采用了阿里云自主研制的分布式文件系统PolarFS。PolarFS采用全用户空间I/O栈设计,具备与本地SSD硬盘相当的低延迟高性能I/O能力,同时以分布式集群的方式提供了优异的存储容量与性能扩展能力。计算节点与存储节点之间通过25Gb高速RDMA网络互联,采用旁路内核的用户态网络协议层进行通讯,保证了事务和查询语句的低延迟。

需要先登录阿里云控制台,点击:阿里云控制台

2.2 一写多读集群与自动读写分离

PolarDB PostgreSQL版采用多节点集群架构,一个集群包含一个主节点(可读可写)和最多15个只读节点。当应用程序使用集群地址时,PolarDB通过内置的代理层PolarProxy对外提供服务。代理层不仅负责安全认证和保护,还可以解析SQL语句,将写操作发送到主节点,将读操作均衡地分发到多个只读节点,实现自动的读写分离。对于应用程序而言,整个集群就像一个单点数据库一样易用。

PolarDB最高支持500TB存储空间,按实际使用的容量动态扩容,不影响业务的正常使用。数据库节点最多可以扩容到16个,其中1个读写节点,其余均为只读节点。得益于计算存储分离的架构,PolarDB可以在5分钟内快速拉起一个新的只读节点,挂载同一块存储数据卷,无需复制拷贝数据即可对外提供服务。

三、集群创建与初始化配置

3.1 集群创建流程

使用PolarDB PostgreSQL版的第一步是创建集群。登录阿里云控制台后,搜索PolarDB进入云原生数据库页面,点击创建实例。在基础配置环节,需要选择计费类型:包年包月适用于长期稳定业务,按量付费适用于业务波动较大的场景。地域和可用区应选择靠近业务的位置,优先与ECS同地域以使用内网连接降低延迟。数据库引擎必须选择PostgreSQL版(兼容Oracle),版本推荐2.0最新稳定版。网络类型选择VPC网络与交换机,确保与应用网络互通。

在资源规格选择方面,需要根据业务并发与数据量确定主节点和只读节点的规格。只读节点数量可以设置为0至15个,用于分担读压力。存储空间最小50GB,支持自动扩容,按实际使用计费。勾选服务协议后点击立即购买,等待10至15分钟完成集群创建。

3.2 网络安全配置

集群创建完成后,必须配置IP白名单与安全组以控制访问权限、保障数据库安全。设置IP白名单的具体操作是:进入实例详情页,左侧导航栏选择配置与管理 > 集群白名单,点击新增IP白名单分组,输入分组名称与允许访问的IP地址。IP地址支持单个IP、网段如192.168.1.0/24等多种格式。特别注意,0.0.0.0/0表示允许所有IP访问,生产环境严禁使用。在安全组配置方面,可以在集群白名单页面点击选择安全组,绑定ECS所在安全组,安全组入方向需放行数据库端口(默认可使用1521或5432),允许ECS访问数据库。

3.3 数据库账号创建

集群创建成功后,需要在集群管理页面的账号管理中创建数据库账号。账号类型分为高权限账号和普通账号,两者在权限上存在差异。高权限账号拥有集群的最高管理权限,名称在PolarDB PostgreSQL版中为dbsuperuser。创建账号时需要设置一个包含大小写字母、数字和特殊字符的强密码。

在账号权限管理方面,PolarDB PostgreSQL版采用User = Role + Login权限的模型。角色(Role)作为权限集合承载具体的权限细分操作,但角色本身没有登录权限。用户则是附加了登录权限的角色。当角色的权限发生变化时,所有关联该角色的用户权限会同步更新。这种基于角色的权限管理方式便于实现精细化的权限控制,是最佳实践推荐的做法。

四、连接数据库的方式

4.1 通过DMS连接

数据管理DMS是阿里云提供的一站式数据库管理平台,支持在Web界面上直接管理和操作PolarDB集群。在集群管理页面的数据库管理区域,点击登录数据库按钮,输入数据库账号和密码即可跳转至DMS控制台。登录DMS后,在左侧导航栏的已登录实例列表中,单击目标集群名称,再单击目标数据库名称,双击public即可切换到目标数据库进行管理操作。DMS无需额外安装客户端,开箱即用,特别适合日常运维和快速查询场景。

4.2 通过psql命令行工具连接

psql是PostgreSQL官方提供的标准命令行交互工具,同样适用于连接PolarDB PostgreSQL版集群。用户可以从PostgreSQL官网下载安装psql工具。连接命令的基本格式如下:

psql -h <集群连接地址> -p <端口号> -U <用户名> -d <数据库名>

连接成功后,会进入psql交互式命令行界面,可以执行标准的SQL语句和psql元命令。Windows系统与Linux系统的psql工具连接方法完全一致。值得注意的是,新购PolarDB PostgreSQL版的默认端口号已变更为5432。

4.3 获取连接地址

在集群管理页面的基本信息区域,可以找到集群的主地址和端口号。PolarDB提供两种类型的连接地址:主地址和集群地址。推荐使用集群地址,因为集群地址内置了读写分离能力,默认端口号为1521。如果使用ECS访问PolarDB且ECS与PolarDB位于同一VPC内,应选择私网地址以获得最佳性能。如果是在本地环境中访问,则需要申请公网地址。需要注意的是,公网地址会增加安全风险,建议仅用于临时开发测试。

五、常用SQL语法详解

5.1 Oracle兼容数据类型

PolarDB PostgreSQL版(兼容Oracle)在SQL层面支持与Oracle同名的数据类型,用户可以直接使用熟悉的Oracle数据类型,其含义与用法在PolarDB中是等价的。以下是主要的数据类型映射关系:

字符串类型方面,CHAR(n)对应底层的character类型,是定长字符串并使用空格填充;VARCHAR(n)和VARCHAR2(n)都对应底层的character varying类型,是变长字符串且有长度限制;NCHAR(n)对应character类型;LONG对应text类型,是可变长度的长字符串;CLOB同样对应text类型,是可变长度的字符大对象且无长度限制。

数字类型方面,NUMBER(p,s)对应底层的numeric类型,是精确数值并可指定精度;BINARY_FLOAT对应real类型,是4字节单精度浮点数;BINARY_DOUBLE对应double precision类型,是8字节双精度浮点数。

时间类型方面,DATE对应date类型;TIMESTAMP[(p)]对应timestamp without time zone类型;TIMESTAMP[(p)] WITH TIME ZONE对应timestamp with time zone类型;INTERVAL YEAR TO MONTH和INTERVAL DAY TO SECOND都对应interval类型。

二进制类型方面,RAW和LONG RAW都对应bytea类型;BLOB同样对应bytea类型,用于存储大型二进制数据。其他类型中,ROWID对应rowid类型表示行的物理地址。

5.2 数据定义语言(DDL)

创建表是数据库操作的基础。以下是使用Oracle兼容数据类型创建表的示例:

CREATE TABLE employees (    emp_id NUMBER(10) PRIMARY KEY,    emp_name VARCHAR2(100) NOT NULL,    hire_date DATE,    salary NUMBER(10,2),    email VARCHAR2(200) UNIQUE,    status CHAR(1) DEFAULT 'A');

修改表结构的常用操作包括添加列、修改列、删除列和重命名列:

-- 添加新列ALTER TABLE employees ADD department_id NUMBER(10);-- 修改列的数据类型ALTER TABLE employees MODIFY emp_name VARCHAR2(200);-- 删除列ALTER TABLE employees DROP COLUMN status;-- 重命名列ALTER TABLE employees RENAME COLUMN email TO emp_email;

创建索引是提升查询性能的关键手段:

CREATE INDEX idx_employees_name ON employees(emp_name);CREATE UNIQUE INDEX idx_employees_email ON employees(emp_email);CREATE INDEX idx_employees_dept ON employees(department_id, hire_date);

删除表和索引使用DROP命令:

DROP TABLE employees;DROP INDEX idx_employees_name;

5.3 分区表设计

PolarDB PostgreSQL版(兼容Oracle)支持完善的分区表功能。分区策略包括范围分区(RANGE)、列表分区(LIST)和哈希分区(HASH)三种类型。以下是按日期范围分区的示例:

CREATE TABLE sales (    sale_id NUMBER(10),    sale_date DATE,    amount NUMBER(10,2),    region VARCHAR2(50)) PARTITION BY RANGE (sale_date) (    PARTITION sales_2024_q1 VALUES LESS THAN (DATE '2024-04-01'),    PARTITION sales_2024_q2 VALUES LESS THAN (DATE '2024-07-01'),    PARTITION sales_2024_q3 VALUES LESS THAN (DATE '2024-10-01'),    PARTITION sales_2024_q4 VALUES LESS THAN (DATE '2025-01-01'));

分区表支持两种索引类型:本地索引和全局索引。本地索引与分区表的分区一一对应,具有与表相同的分区数和分区范围,每个索引分区都与基础表的一个分区相关联。这种设计使得分区维护操作更加高效,也便于实现分区级别的数据管理。

PolarDB PostgreSQL版提供了多个系统视图用于查看分区表的结构信息。pg_partitioned_table视图返回分区表的核心信息,包括分区策略(partstrat字段取值h表示哈希分区、l表示列表分区、r表示范围分区)、分区键列数等。pg_partition_tree函数用于列出分区树中表或索引的相关信息。

5.4 数据操纵语言(DML)

PolarDB PostgreSQL版(兼容Oracle)接受标准的PostgreSQL DML命令,包括INSERT、UPDATE、DELETE和COPY。

插入数据的示例:

-- 单行插入INSERT INTO employees (emp_id, emp_name, hire_date, salary) VALUES (1001, '张三', DATE '2024-01-15', 15000.00);-- 多行插入INSERT INTO employees (emp_id, emp_name, hire_date, salary) VALUES (1002, '李四', DATE '2024-02-01', 12000.00), (1003, '王五', DATE '2024-03-10', 18000.00);-- 从查询结果插入INSERT INTO employees_history SELECT * FROM employees WHERE hire_date < DATE '2024-01-01';

更新数据的示例:

-- 更新单列UPDATE employees SET salary = salary * 1.1 WHERE emp_id = 1001;-- 更新多列UPDATE employees SET salary = salary * 1.05, status = 'P' WHERE hire_date < DATE '2023-01-01';

删除数据的示例:

-- 删除指定条件的数据DELETE FROM employees WHERE emp_id = 1003;-- 删除所有数据(保留表结构)DELETE FROM employees;

值得一提的是,PolarDB PostgreSQL版(兼容Oracle)在执行DELETE、INSERT、SELECT或UPDATE命令时,会生成多个执行计划,然后根据预估执行成本等因素选择最优计划。用户还可以使用Optimizer Hint来影响最优执行计划的选择。

5.5 高级查询

多表连接是关系型数据库查询的核心能力。PolarDB PostgreSQL版(兼容Oracle)支持内连接、左外连接、右外连接和全外连接:

-- 内连接SELECT e.emp_name, d.dept_nameFROM employees eINNER JOIN departments d ON e.department_id = d.dept_id;-- 左外连接(Oracle兼容的(+)写法也支持)SELECT e.emp_name, d.dept_nameFROM employees e, departments dWHERE e.department_id = d.dept_id(+);

聚合查询与分组统计:

-- 统计各部门的员工数量和平均薪资SELECT department_id, COUNT(*) as emp_count, AVG(salary) as avg_salaryFROM employeesGROUP BY department_idHAVING COUNT(*) > 5ORDER BY avg_salary DESC;

子查询与CTE(公共表表达式):

-- 子查询SELECT emp_name, salaryFROM employeesWHERE salary > (SELECT AVG(salary) FROM employees);-- CTE(WITH子句)WITH dept_stats AS (    SELECT department_id, AVG(salary) as dept_avg    FROM employees    GROUP BY department_id)SELECT e.emp_name, e.salary, ds.dept_avgFROM employees eJOIN dept_stats ds ON e.department_id = ds.department_idWHERE e.salary > ds.dept_avg;

序列(Sequence)是Oracle数据库中常用的对象,PolarDB PostgreSQL版(兼容Oracle)同样支持:

-- 创建序列CREATE SEQUENCE emp_seq START WITH 1000 INCREMENT BY 1;-- 使用序列插入数据INSERT INTO employees (emp_id, emp_name, hire_date) VALUES (emp_seq.NEXTVAL, '赵六', SYSDATE);

5.6 PL/SQL编程

PolarDB PostgreSQL版(兼容Oracle)支持完整的PL/SQL编程体系,包括存储过程、函数、触发器、异常处理等核心特性。

存储过程的创建与调用:

CREATE OR REPLACE PROCEDURE update_salary(    p_emp_id IN NUMBER,    p_percent IN NUMBER) ISBEGIN    UPDATE employees SET salary = salary * (1 + p_percent/100)    WHERE emp_id = p_emp_id;    COMMIT;EXCEPTION    WHEN NO_DATA_FOUND THEN        DBMS_OUTPUT.PUT_LINE('员工ID不存在');    WHEN OTHERS THEN        ROLLBACK;        DBMS_OUTPUT.PUT_LINE('发生错误: ' || SQLERRM);END update_salary;/-- 调用存储过程CALL update_salary(1001, 10);

函数的创建与调用:

CREATE OR REPLACE FUNCTION get_annual_bonus(    p_emp_id IN NUMBER)RETURN NUMBERIS    v_salary NUMBER;    v_bonus NUMBER;BEGIN    SELECT salary INTO v_salary FROM employees WHERE emp_id = p_emp_id;    v_bonus := v_salary * 0.15;    RETURN v_bonus;EXCEPTION    WHEN NO_DATA_FOUND THEN        RETURN 0;END get_annual_bonus;/-- 调用函数SELECT emp_name, get_annual_bonus(emp_id) as bonus FROM employees;

触发器的创建:

CREATE OR REPLACE TRIGGER trg_employees_auditAFTER INSERT OR UPDATE OR DELETE ON employeesFOR EACH ROWBEGIN    IF INSERTING THEN        INSERT INTO audit_log (table_name, operation, record_id, change_time)        VALUES ('EMPLOYEES', 'INSERT', :NEW.emp_id, SYSDATE);    ELSIF UPDATING THEN        INSERT INTO audit_log (table_name, operation, record_id, change_time)        VALUES ('EMPLOYEES', 'UPDATE', :OLD.emp_id, SYSDATE);    ELSIF DELETING THEN        INSERT INTO audit_log (table_name, operation, record_id, change_time)        VALUES ('EMPLOYEES', 'DELETE', :OLD.emp_id, SYSDATE);    END IF;END trg_employees_audit;/

5.7 事务管理与隔离级别

PolarDB PostgreSQL版(兼容Oracle)支持完整的事务管理机制。事务的基本操作包括BEGIN、COMMIT和ROLLBACK:

BEGIN;    UPDATE accounts SET balance = balance - 1000 WHERE account_id = 1;    UPDATE accounts SET balance = balance + 1000 WHERE account_id = 2;    -- 检查余额是否足够    -- 如果一切正常则提交    COMMIT;    -- 如果出现问题则回滚    -- ROLLBACK;

PolarDB支持标准的隔离级别,包括READ COMMITTED(读已提交)和SERIALIZABLE(可串行化)等。用户可以通过SET TRANSACTION命令设置事务的隔离级别:

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

PolarDB利用基于Redo的物理复制代替基于Binlog的逻辑复制,大幅提升了主备复制的效率和稳定性。即使对大表进行加索引、加字段等DDL操作,也不会造成数据库的明显延迟。

六、集群运维与监控

6.1 性能监控

阿里云控制台提供了丰富的监控指标,包括CPU利用率、内存使用率、连接数、QPS(每秒查询数)、TPS(每秒事务数)、慢查询日志等。用户可以通过云监控服务设置告警规则,当指标超过阈值时及时收到通知。PolarDB支持超过50万次/秒的读请求以及超过15万次/秒的写请求。

6.2 参数配置

PolarDB PostgreSQL版提供了丰富的可配置参数,用户可以在控制台的参数设置页面进行调整。常见参数包括shared_buffers(共享缓冲区大小)、work_mem(工作内存)、maintenance_work_mem(维护工作内存)等。部分高级特性需要开启特定参数,例如Oracle兼容的系统权限功能需要启用polar_enable_system_privilege参数。

6.3 备份与恢复

PolarDB提供免费的数据备份容灾服务。不论多大的数据量,全库备份只需30秒,而且备份过程不会对数据库加锁,对应用程序几乎无影响,全天24小时均可进行备份。用户可以根据业务需求设置自动备份策略,也可以随时发起手动备份。

七、数据迁移方案

7.1 从Oracle迁移

PolarDB PostgreSQL版(兼容Oracle)为Oracle用户提供了全面的迁移解决方案。阿里云提供了ADAM(Advanced Database & Application Migration)智能迁移工具,可以处理评估、数据同步等迁移全流程。现有Oracle的查询、存储过程和应用程序逻辑无需重写即可直接运行。

7.2 从RDS PostgreSQL迁移

从RDS PostgreSQL迁移至PolarDB PostgreSQL版可以通过pg_dump和pg_restore命令完成。基本步骤如下:

-- 在源库导出数据pg_dump -h <源地址> -U <用户名> -d <数据库名> -F c -f backup.dump-- 在目标库恢复数据pg_restore -h <目标地址> -U <用户名> -d <数据库名> backup.dump

7.3 使用DTS进行数据迁移

数据传输服务DTS支持结构迁移、全量数据迁移以及增量数据迁移。通过同时使用这三种迁移类型,可以实现在自建应用不停服的情况下平滑完成数据库迁移。DTS在迁移过程中会以Session级别暂时禁用约束检查以及外键级联操作。

八、性能优化建议

在实际使用PolarDB PostgreSQL版时,以下几点优化建议值得关注。首先,合理利用读写分离能力,将读密集型查询分流到只读节点,通过集群地址自动实现的读写分离可以显著提升整体吞吐量。其次,善用分区表技术,对于数据量巨大的大表,按时间或业务维度进行分区可以大幅提升查询和维护效率。第三,建立合理的索引策略,根据实际查询模式创建必要的索引,同时避免过多索引带来的维护开销。第四,利用跨机并行查询能力,PolarDB支持多个节点跨机并行执行SQL,可以充分发挥所有计算节点的硬件资源来加速分析型查询。最后,定期监控慢查询日志,分析执行计划,针对性进行SQL优化。

九、常见问题解答

问1:PolarDB PostgreSQL版与原生PostgreSQL有什么区别?
答:PolarDB PostgreSQL版100%兼容原生PostgreSQL,在此基础上增加了计算存储分离的云原生架构、一写多读集群、自动读写分离、秒级弹性扩缩容等企业级特性。同时兼容Oracle版本还提供了对Oracle语法的高度兼容能力。

问2:如何选择PolarDB PostgreSQL版的节点规格?
答:节点规格应根据业务并发量与数据量综合评估。测试环境可以选择最低配置以控制成本;生产环境建议根据实际负载选择2核8G、4核16G或更高规格。只读节点的数量取决于读请求的比例,读多写少的场景可以配置更多只读节点。

问3:PolarDB PostgreSQL版支持哪些连接方式?
答:支持多种连接方式,包括通过阿里云DMS数据管理平台在Web端直接连接、使用PostgreSQL官方psql命令行工具连接、以及通过应用程序使用JDBC/ODBC等标准接口连接。

问4:原来Oracle中的PL/SQL代码需要修改吗?
答:PolarDB PostgreSQL版(兼容Oracle)高度兼容Oracle的PL/SQL语法,支持存储过程、函数、触发器、异常处理等核心特性。大部分存量PL/SQL代码无需修改即可直接运行。建议在迁移前使用ADAM工具进行兼容性评估。

问5:PolarDB的备份是如何收费的?
答:PolarDB提供免费的数据备份容灾服务。全库备份只需30秒,且备份过程不影响业务。超出免费额度部分按照产品计费标准收取,具体可参考官方产品计费说明。

问6:如何查看PolarDB的内核版本?
答:可以通过执行SHOW polardb_version;语句查看当前内核小版本号。也可以在PolarDB控制台的集群基本信息页面查看版本信息。

相关文章

买阿里云服务器能便宜吗?十年代理揭秘 3 大省钱攻略!

买阿里云服务器能便宜吗?十年代理揭秘 3 大省钱攻略!

作为深耕阿里云代理领域 10 年的 “老司机”,经常被问到:“买阿里云服务器能便宜吗?有没有优惠价格?” 今天就用实打实的行业经验告诉你:不仅能便宜,选对渠道还能省一大笔! 这篇文章带你解锁阿里云服务…

做了 10 年腾讯云代理,我想跟你聊聊返佣那些事儿​

做了 10 年腾讯云代理,我想跟你聊聊返佣那些事儿​

最近总有朋友问我:“腾讯云有返点吗?腾讯云服务器能拿佣金不?返佣比例到底有多少?” 作为一个在腾讯云代理行业摸爬滚打了 10 年的 “老人”,今天就来跟大家好好…

阿里云代理商返佣机制深度解析:头部代理优势与企业合作策略

阿里云代理商返佣机制深度解析:头部代理优势与企业合作策略

阿里云代理商的核心价值定位1. 代理商的角色与职责阿里云代理商作为阿里云生态的核心合作伙伴,承担着双重核心职能:• 产品销售:负责推广销售阿里云全系列云产品,包括云服务器ECS、云数据库RDS、对象存…

阿里云代理商返佣机制深度解析:头部代理优势与企业合作策略

阿里云代理商返佣机制深度解析:头部代理优势与企业合作策略

01一、阿里云代理商的核心价值定位1. 代理商的角色与职责阿里云代理商作为阿里云生态的核心合作伙伴,承担着双重核心职能:• 产品销售:负责推广销售阿里云全系列云产品,包括云服务器ECS、云数据库RDS…

阿里云代理商有哪些?阿里云代理返点是真的么?

阿里云代理商有哪些?阿里云代理返点是真的么?

一,阿里云代理商基本介绍阿里云代理商通俗一点,就是指从事阿里云云服务器,云数据库等阿里云公有云产品销售的代理商,每销售一件阿里云公有云产品出去,阿里云给予该代理商一定比例的提成。在阿里云官方定义中,这…

2026阿里云代理商生态全解析:五级代理体系、返佣政策与企业上云指南

2026阿里云代理商生态全解析:五级代理体系、返佣政策与企业上云指南

一、阿里云五级代理体系:权益阶梯与合作价值1. 五级代理的核心权益差异阿里云构建了多层次的代理生态体系,涵盖全国总代理、区域核心代理、行业ISV(独立软件开发商)、金牌/银牌认证代理及标准代理五大核心…