Apache Doris ODBC外表之Postgresql使用指南

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 希望Doris 2022年起飞,顺利从Apache 孵化器毕业成顶级项目,给大家带来更快、更稳定、生态更丰富的MPP OLAP分析型数据库产品。

今天是2022年阳历新年第一天,祝大家元旦快乐,这也是2022年第一篇文章,后续会给大家带来更多关于Doris的文章,同时也希望Doris 2022年起飞,顺利从Apache 孵化器毕业成顶级项目,给大家带来更快、更稳定、生态更丰富的MPP OLAP分析型数据库产品。


Apache Doris 社区 2022 年的总体规划,包括待开展或已开展、以及已完成但需要持续优化的功能、文档、社区建设等多方面,我们期待有更多的小伙伴参与进来讨论。同时也希望多多关注Doris,给Doris加Star


Apache Doris 2022 Roadmap


该使用指南之针对Ubuntu环境来进行测试的,Centos环境可以参考,但是不确保一定能成功。


1.软件环境


  1. 操作系统:ubuntu 18.04
  2. Apache Doris :0.15
  3. Postgresql数据库:PostgreSQL 12.9
  4. UnixODBC:2.3.4
  5. Mysql Connector ODBC :5.3.13、8.0.11、8.0.26


2.安装ODBC驱动


首先我们安装unixODBC驱动、这里直接给出驱动的下载地址及安装命令

sudo wget ftp://ftp.unixodbc.org/pub/unixODBC/unixODBC-2.3.4.tar.gz 
tar -xvzf unixODBC-2.3.4.tar.gz 
cd unixODBC-2.3.4/
sudo ./configure --prefix=/usr/local/unixODBC-2.3.7 --includedir=/usr/include --libdir=/usr/lib -bindir=/usr/bin --sysconfdir=/etc
make
sudo make install

安装成功后,unixODBC所需的头文件都被安装到了/usr/inlucde下,编译好的库文件安装到了/usr/lib下,与unixODBC相关的可执行文件安装到了/usr/bin下,配置文件放到了/etc下。


验证安装是否成功


# odbcinst -j
unixODBC 2.3.4
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /root/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8

3.安装Postgresql数据库


Ubuntu的默认存储库包含Postgres软件包,因此您可以使用apt安装这些软件包。


安装之前先用apt更新一下本地软件包,然后,安装Postgres包和一个附加实用程序和功能的- managed包:

$ sudo apt update
$ sudo apt install postgresql postgresql-contrib

现在已经安装了该软件,我们可以了解它的工作原理以及它与您可能使用的类似数据库管理系统的不同之处。


3.1 使用PostgreSQL roles和数据库


默认情况下,Postgres使用称为“roles”的概念来处理身份验证和授权。在某些方面,这些类似于常规的Unix风格帐户,但Postgres不区分用户和组,而是更喜欢更灵活的术语“roles”。


安装后,Postgres设置为使用ident身份验证,这意味着它将Postgresroles与匹配的Unix / Linux系统帐户相关联。如果Postgres中存在roles,则具有相同名称的Unix / Linux用户名可以作为该roles登录。


安装过程创建了一个名为postgres的用户帐户,该帐户与默认的Postgresroles相关联。要使用Postgres,您可以登录该帐户。


有几种方法可以使用此帐户访问Postgres。


3.2 切换到postgres帐户


输入以下内容切换到服务器上的postgres帐户:

$ sudo -i -u postgres

您现在可以通过输入以下内容立即访问Postgres提示:

$ psql

这将使您进入PostgreSQL提示符,从此处您可以立即与数据库管理系统进行交互。

输入以下命令退出PostgreSQL提示符:

postgres=# \q

这将带您回到postgresLinux命令提示符。


3.3 在不切换帐户的情况下访问Postgres


您也可以让postgres帐户用sudo运行您想要的命令。


例如,在最后一个示例中,您被指示通过首先切换到postgres用户然后运行psql以打开Postgres提示来进入Postgres提示。您可以通过psqlpostgres用户身份运行单个命令来一步完成此操作sudo,如下所示:


$ sudo -u postgres psql

这将直接登录到Postgres,中间没有中间bashshell。


同样,您可以通过输入以下内容退出交互式Postgres会话:

postgres=# \q

许多用例需要多个Postgresroles。继续阅读以了解如何配置这些


3.4 创建用户,数据库及表


使用默认用户登录postgresql创建用户、创建数据库及完成授权


$ sudo -u postgres psql

创建数据库新用户,如 dbuser:


postgres=# CREATE USER dbuser WITH PASSWORD 'zhangfeng';

注意:


语句要以分号结尾。 密码要用单引号括起来。 创建用户数据库,你也可以通过你创建的用户登录进去以后创建数据库,如demo:


postgres=# CREATE DATABASE demo OWNER dbuser;

将demo数据库的所有权限都赋予dbuser:


postgres=# GRANT ALL PRIVILEGES ON DATABASE demo TO dbuser;

使用命令 \q 退出psql:


postgres=# \q

创建Linux普通用户,与刚才新建的数据库用户同名,如 dbuser:


$ sudo adduser dbuser
$ sudo passwd dbuser

以dbuser的身份连接数据库exampledb:


$ su - dbuser
Password: 
Last login: Wed Mar 1 11:52:07 CST 2017 on pts/

用我们创建的用户(dbuser)登录psql


# sudo -u dbuser psql -U dbuser -d demo
could not change directory to "/root": Permission denied
psql (12.9 (Ubuntu 12.9-0ubuntu0.20.04.1))
Type "help" for help.
demo=> \d
                    List of relations
 Schema |           Name            |   Type   |  Owner
--------+---------------------------+----------+----------
 public | playground                | table    | postgres
 public | playground_1              | table    | dbuser
 public | playground_1_equip_id_seq | sequence | dbuser
 public | playground_equip_id_seq   | sequence | postgres
(4 rows)

创建表及插入数据


CREATE TABLE playground_test_odbc (
    equip_id serial PRIMARY KEY,
    type varchar (50) NOT NULL,
    color varchar (25) NOT NULL,
    location varchar(25) ,
    install_date date
);

示例数据


INSERT INTO playground_test_odbc (type, color, location, install_date) VALUES ('slide', 'blue', 'south', '2017-04-28');
INSERT INTO playground_test_odbc (type, color, location, install_date) VALUES ('swing', 'yellow', 'northwest', '2018-08-16');

执行结果

demo=> CREATE TABLE playground_test_odbc (
demo(>     equip_id serial PRIMARY KEY,
demo(>     type varchar (50) NOT NULL,
demo(>     color varchar (25) NOT NULL,
demo(>     location varchar(25) ,
demo(>     install_date date
demo(> );
CREATE TABLE
demo=> INSERT INTO playground_test_odbc (type, color, location, install_date) VALUES ('slide', 'blue', 'south', '2017-04-28');
INSERT 0 1
demo=> INSERT INTO playground_test_odbc (type, color, location, install_date) VALUES ('swing', 'yellow', 'northwest', '2018-08-16');
INSERT 0 1

4.安装Postgresql ODBC驱动


这里我们下载是和数据版本相对于的驱动程序


wget https://ftp.postgresql.org/pub/odbc/versions/src/psqlodbc-12.02.0000.tar.gz
tar zxvf psqlodbc-12.02.0000.tar.gz
cd psqlodbc-12.02.0000
./configure --without-libpq   (注:由于本机未安装postgresql,故使用without-libpq选项) 
./configure
make
make install

如果在编译过程中出现下面的错误


configure: error: libpq library version >= 9.2 is required

这是因为缺少libpq的包,需要进行安装,执行下面的命令


apt-get install libpq-dev

安装成功,默认驱动放在/usr/local/lib/psqlodbcw.so下


5.验证ODBC驱动是否成功


5.1 配置注册Postgresql ODBC驱动


编辑/etc/odbcinst.ini,加入下面的内容


[PostgreSQL]
Description = ODBC for PostgreSQL
Driver = /usr/local/lib/psqlodbcw.so
Driver64 = /usr/local/lib/psqlodbcw.so
Setup = /usr/lib/libodbc.so    ##注意这里是在第二节安装的unixODBC的so文件路径
Setup64 = /usr/lib/libodbc.so
FileUsage = 1

5.2 配置PG 数据源


编辑/etc/odbc.ini


加入下面内容

[PostgresDB]
Driver = PostgreSQL    ###这里的名称和odbcinst.ini里配置的名称一致
Description = Postgres DSN
Servername = localhost
Database = demo
Username = dbuser
Password = zhangfeng
Port = 5432
ReadOnly = No

其他的是你的Postgresql地址及刚才创建的用户、密码、数据库、端口等


5.3 验证是否成功


isql -v PostgresDB dbuser zhangfeng
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL>

注意这里的PostgresDB是我们在odbc.ini里定义的名称,这里显示ODBC正常


6.Apache Doris PG外表验证


6.1 修改配置


修改BE节点conf/odbcinst.ini文件,加入刚才/etc/odbcinst.ini添加的一样内容,并删除原先的PostgreSQL配置

[PostgreSQL]
Description = ODBC for PostgreSQL
Driver = /usr/local/lib/psqlodbcw.so
Driver64 = /usr/local/lib/psqlodbcw.so
Setup = /usr/lib/libodbc.so
Setup64 = /usr/lib/libodbc.so
FileUsage = 1

6.2 验证


创建PG ODBC Resource


CREATE EXTERNAL RESOURCE `pg_12`
 PROPERTIES (
"host" = "localhost",
 "port" = "5432",
 "user" = "dbuser",
 "password" = "zhangfeng",
 "database" = "demo",
 "table" = "playground_test_odbc",
 "driver" = "PostgreSQL",  
 "odbc_type" = "postgresql",
 "type" = "odbc_catalog"
 );

创建ODBC外表

CREATE EXTERNAL TABLE `playground_odbc_12` (
    equip_id int NOT NULL,
    type varchar (50) NOT NULL,
    color varchar (25) NOT NULL,
    location varchar(25) ,
    install_date date
) ENGINE=ODBC
COMMENT "ODBC"
PROPERTIES (
"odbc_catalog_resource" = "pg_12", 
"database" = "demo",
"table" = "playground_test_odbc"
);

在Doris下执行查询:

ysql> show tables;
+--------------------+
| Tables_in_demo     |
+--------------------+
| playground_odbc_12 |
| test_odbc_5        |
| test_odbc_8        |
| test_odbc_8_0_26   |
| test_odbc_mysql    |
| test_odbc_mysql_8  |
+--------------------+
6 rows in set (0.00 sec)
mysql> select * from playground_odbc_12;
+----------+-------+--------+-----------+--------------+
| equip_id | type  | color  | location  | install_date |
+----------+-------+--------+-----------+--------------+
|        1 | slide | blue   | south     | 2017-04-28   |
|        2 | swing | yellow | northwest | 2018-08-16   |
+----------+-------+--------+-----------+--------------+
2 rows in set (0.01 sec)

OK,一切正常,相对Mysql PG的ODBC驱动更简单一些,只要你的PG版本和ODBC驱动版本对应上问题都不大。




相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
22小时前
|
SQL 存储 数据处理
别让你的CPU打盹儿:Apache Doris并行执行原理大揭秘!
别让你的CPU打盹儿:Apache Doris并行执行原理大揭秘!
11 1
别让你的CPU打盹儿:Apache Doris并行执行原理大揭秘!
|
26天前
|
存储 消息中间件 分布式计算
Cisco WebEx 数据平台:统一 Trino、Pinot、Iceberg 及 Kyuubi,探索 Apache Doris 在 Cisco 的改造实践
Cisco WebEx 早期数据平台采用了多系统架构(包括 Trino、Pinot、Iceberg 、 Kyuubi 等),面临架构复杂、数据冗余存储、运维困难、资源利用率低、数据时效性差等问题。因此,引入 Apache Doris 替换了 Trino、Pinot 、 Iceberg 及 Kyuubi 技术栈,依赖于 Doris 的实时数据湖能力及高性能 OLAP 分析能力,统一数据湖仓及查询分析引擎,显著提升了查询性能及系统稳定性,同时实现资源成本降低 30%。
Cisco WebEx 数据平台:统一 Trino、Pinot、Iceberg 及 Kyuubi,探索 Apache Doris 在 Cisco 的改造实践
|
15天前
|
SQL 存储 Apache
Apache Doris 3.0.3 版本正式发布
亲爱的社区小伙伴们,Apache Doris 3.0.3 版本已于 2024 年 12 月 02 日正式发布。该版本进一步提升了系统的性能及稳定性,欢迎大家下载体验。
|
1月前
|
SQL 存储 数据处理
兼顾高性能与低成本,浅析 Apache Doris 异步物化视图原理及典型场景
Apache Doris 物化视图进行了支持。**早期版本中,Doris 支持同步物化视图;从 2.1 版本开始,正式引入异步物化视图,[并在 3.0 版本中完善了这一功能](https://www.selectdb.com/blog/1058)。**
|
1月前
|
SQL 存储 Java
Apache Doris 2.1.7 版本正式发布
亲爱的社区小伙伴们,**Apache Doris 2.1.7 版本已于 2024 年 11 月 10 日正式发布。**2.1.7 版本持续升级改进,同时在湖仓一体、异步物化视图、半结构化数据管理、查询优化器、执行引擎、存储管理、以及权限管理等方面完成了若干修复。欢迎大家下载使用。
|
2天前
|
存储 Oracle 关系型数据库
数据库传奇:MySQL创世之父的两千金My、Maria
《数据库传奇:MySQL创世之父的两千金My、Maria》介绍了MySQL的发展历程及其分支MariaDB。MySQL由Michael Widenius等人于1994年创建,现归Oracle所有,广泛应用于阿里巴巴、腾讯等企业。2009年,Widenius因担心Oracle收购影响MySQL的开源性,创建了MariaDB,提供额外功能和改进。维基百科、Google等已逐步替换为MariaDB,以确保更好的性能和社区支持。掌握MariaDB作为备用方案,对未来发展至关重要。
10 3
|
2天前
|
安全 关系型数据库 MySQL
MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!
《MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!》介绍了MySQL中的三种关键日志:二进制日志(Binary Log)、重做日志(Redo Log)和撤销日志(Undo Log)。这些日志确保了数据库的ACID特性,即原子性、一致性、隔离性和持久性。Redo Log记录数据页的物理修改,保证事务持久性;Undo Log记录事务的逆操作,支持回滚和多版本并发控制(MVCC)。文章还详细对比了InnoDB和MyISAM存储引擎在事务支持、锁定机制、并发性等方面的差异,强调了InnoDB在高并发和事务处理中的优势。通过这些机制,MySQL能够在事务执行、崩溃和恢复过程中保持
13 3
|
2天前
|
SQL 关系型数据库 MySQL
数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog
《数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog》介绍了如何利用MySQL的二进制日志(Binlog)恢复误删除的数据。主要内容包括: 1. **启用二进制日志**:在`my.cnf`中配置`log-bin`并重启MySQL服务。 2. **查看二进制日志文件**:使用`SHOW VARIABLES LIKE 'log_%';`和`SHOW MASTER STATUS;`命令获取当前日志文件及位置。 3. **创建数据备份**:确保在恢复前已有备份,以防意外。 4. **导出二进制日志为SQL语句**:使用`mysqlbinlog`
18 2
|
15天前
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
100 15
|
9天前
|
SQL 关系型数据库 MySQL
数据库数据恢复—Mysql数据库表记录丢失的数据恢复方案
Mysql数据库故障: Mysql数据库表记录丢失。 Mysql数据库故障表现: 1、Mysql数据库表中无任何数据或只有部分数据。 2、客户端无法查询到完整的信息。

推荐镜像

更多