PostgreSQL 连接器¶
PostgreSQL 连接器允许查询和创建外部 PostgreSQL 数据库中的表。这可以用来连接不同系统(如 PostgreSQL 和 Hive)之间的数据,或连接两个不同的 PostgreSQL 实例之间的数据。
配置¶
要配置 PostgreSQL 连接器,请在 etc/catalog
中创建一个名为(例如)postgresql.properties
的目录属性文件,以将 PostgreSQL 连接器装载为 postgresql
目录。使用以下内容创建文件,根据您的设置替换连接属性
connector.name=postgresql
connection-url=jdbc:postgresql://example.net:5432/database
connection-user=root
connection-password=secret
多个 PostgreSQL 数据库或服务器¶
PostgreSQL 连接器只能访问 PostgreSQL 服务器中的单个数据库。因此,如果您有多个 PostgreSQL 数据库,或者想要连接到多个 PostgreSQL 服务器,您必须配置 PostgreSQL 连接器的多个实例。
要添加另一个目录,只需在 etc/catalog
中添加另一个名称不同的属性文件(确保它以 .properties
结尾)。例如,如果您将属性文件命名为 sales.properties
,Presto 将使用配置的连接器创建名为 sales
的目录。
通用配置属性¶
属性名称 |
描述 |
默认值 |
---|---|---|
|
|
|
|
|
|
|
不区分大小写地匹配数据集和表名。 |
|
|
远程数据集和表名将被缓存的持续时间。设置为 |
|
查询 PostgreSQL¶
PostgreSQL 连接器为每个 PostgreSQL 模式提供一个模式。您可以通过运行 SHOW SCHEMAS
来查看可用的 PostgreSQL 模式。
SHOW SCHEMAS FROM postgresql;
如果您有一个名为 web
的 PostgreSQL 模式,您可以通过运行 SHOW TABLES
来查看此模式中的表。
SHOW TABLES FROM postgresql.web;
您可以使用以下任一方法查看 web
数据库中 clicks
表的列列表:
DESCRIBE postgresql.web.clicks;
SHOW COLUMNS FROM postgresql.web.clicks;
最后,您可以访问 web
模式中的 clicks
表:
SELECT * FROM postgresql.web.clicks;
如果您使用不同的名称为您的目录属性文件命名,请在上面的示例中使用该目录名称代替 postgresql
。
类型映射¶
PrestoDB 和 PostgreSQL 都支持对方不支持的类型。当从 PostgreSQL 读取或写入 PostgreSQL 时,Presto 会将数据类型从 PostgreSQL 转换为等效的 Presto 数据类型,以及从 Presto 转换为等效的 PostgreSQL 数据类型。
PostgreSQL 到 PrestoDB 类型映射¶
连接器将 PostgreSQL 类型映射到相应的 PrestoDB 类型
PostgreSQL 类型 |
PrestoDB 类型 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
不支持其他类型。
PrestoDB 到 PostgreSQL 类型映射¶
连接器将 PrestoDB 类型映射到相应的 PostgreSQL 类型
PrestoDB 类型 |
PostgreSQL 类型 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
不支持其他类型。
包含不支持列的表¶
如果您使用 Presto 连接器查询 PostgreSQL 表,并且该表要么没有支持的列,要么只包含不支持的数据类型,Presto 将返回类似于以下示例的错误。
Query 20231120_102910_00004_35dqb failed: Table 'public.unsupported_type_table' has no supported columns (all 1 columns are not supported).
SQL 支持¶
PostgreSQL 连接器允许查询和创建表。以下是一些支持的 SQL 操作示例
ALTER TABLE¶
ALTER TABLE postgresql.public.sample_table ADD COLUMN new_col INT;
ALTER TABLE postgresql.public.sample_table DROP COLUMN new_col;
ALTER TABLE postgresql.public.sample_table RENAME COLUMN is_active TO is_enabled;
ALTER TABLE postgresql.public.sample_table RENAME TO renamed_table;
注意
Presto 不支持使用 ALTER TABLE 命令直接更改列的数据类型。
ALTER TABLE postgresql.public.users ALTER COLUMN age TYPE BIGINT;
返回类似于以下的错误。
Query 20240322_091317_00007_syzb3 failed: line 1:19: mismatched input 'ALTER'. Expecting: 'FUNCTION', 'SCHEMA', 'TABLE'
CREATE TABLE¶
在 public
模式中创建一个名为 test_integer
的新表。
CREATE TABLE postgresql.public.test_integer ( id INTEGER );
注意
Presto 不强制执行主键约束。例如,以下语句
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR,
email VARCHAR
);
返回类似于以下的错误。
Query 20240322_095447_00010_syzb3 failed: line 2:19: mismatched input 'PRIMARY'. Expecting: ')', ','
CREATE TABLE AS SELECT¶
从现有表 renamed_table
创建一个名为 new_table
的新表。
CREATE TABLE postgresql.public.new_table AS SELECT * FROM postgresql.public.renamed_table;
DESCRIBE¶
要查看web
数据库中clicks
表的列列表,请使用以下任一方法
DESCRIBE postgresql.web.clicks;
SHOW COLUMNS FROM postgresql.web.clicks;
INSERT INTO¶
将数据插入renamed_table
表
INSERT INTO postgresql.public.renamed_table (id, name) VALUES (1, 'Test');
SELECT¶
SELECT * FROM postgresql.public.test_integer;
SHOW SCHEMAS¶
查看可用的PostgreSQL模式
SHOW SCHEMAS FROM postgresql;
SHOW TABLES¶
查看名为web
的PostgreSQL模式中的表
SHOW TABLES FROM postgresql.web;
TRUNCATE¶
删除表renamed_table
中的所有数据,但不删除表本身
TRUNCATE TABLE postgresql.public.renamed_table;
PostgreSQL连接器限制¶
不支持以下SQL语句