PostgreSQL 返回列存格式

PostgreSQL 是一个关系型数据库,无论通过 libpq 还是 jdbc 去进行查询,其返回的数据格式都以行(Row/Record)为单位。不过现在出现了一种新的可能,2023/09/13,Sutou Kouhei 发布了 Apache Arrow Flight SQL adapter for PostgreSQL 0.1.0 版本,这意味着今后我们可以用 arrow flight 来访问保存在 PostgreSQL 中的数据,而且返回的是 Arrow 定义的列存格式! 编译安装 git clone https://github.com/apache/arrow-flight-sql-postgresql.git cd arrow-flight-sql-postgresql mkdir build && cd build meson setup -Dexample=true .. ninja sudo meson install 上面操作结束后会把生成的 arrow_flight_sql.so 拷贝到 pg_config --libdir 指定的目录,然后修改 postgresql.conf 加上下面的语句并重启实例。 shared_preload_libraries = 'arrow_flight_sql' 功能测试 该项目提供了几个客户端程序样例,上面的编译选项 -Dexample=true 把样例程序也编译了,核心代码逻辑如下,这里执行的 SQL 语句被我替换成了带 join 的查询: // Start query arrow::Status run() { arrow::flight::FlightCallOptions call_options; ARROW_ASSIGN_OR_RAISE(auto sql_client, connect(call_options)); ARROW_ASSIGN_OR_RAISE( auto info, sql_client->Execute(call_options, "select * from t1, t2;")); for (const auto& endpoint : info->endpoints()) { ARROW_ASSIGN_OR_RAISE(auto reader, sql_client->DoGet(call_options, endpoint....

September 15, 2023 · 3 min · 453 words · pg-x