PostgreSQL利用Multicorn访问CSV外部数据源

2022-06-01 08:34:52 浏览数 (1)

Multicorn 是一个 PostgreSQL 9.1 的扩展模块,用于简化外部数据封装开发,允许开发者使用 Python 编程语言开发。

Install Multicorn

Requirements

  • Postgresql 9.1
  • Postgresql development packages
  • Python development packages
  • python 2.7 or >= python 3.3 as your default python

由于我前面已经安装了postgresql9.5,下面安装其他的包。测试使用的操作系统是Ubuntu。

代码语言:javascript复制
sudo apt install postgresql-server-dev-9.5

安装pgxn client

代码语言:javascript复制
$ sudo apt install pgxnclient

Ubuntu 16.04 LTS自带python3.5,但是安装pgxnclient的时候会自动安装python2.7,后面安装Multicorn就依赖python2.7了,所以下面安装python-dev。

代码语言:javascript复制
$ sudo apt install python-dev

利用pgxn安装Multicorn:

代码语言:javascript复制
$ sudo pgxn install multicorn

报如下错:

代码语言:javascript复制
/usr/bin/install -c -m 755  multicorn.so '/usr/lib/postgresql/9.5/lib/multicorn.so'
cp .//setup.py ./setup--1.3.3.py
sed -i -e "s/__VERSION__/1.3.3-dev/g" ./setup--1.3.3.py
python2.7 ./setup--1.3.3.py install
Traceback (most recent call last):
  File "./setup--1.3.3.py", line 3, in <module>
    from setuptools import setup, find_packages, Extension
ImportError: No module named setuptools
Makefile:31: recipe for target 'python_code' failed
make: *** [python_code] Error 1

Solution:

代码语言:javascript复制
$ sudo apt install python-pip

安装了pip之后继续执行$ sudo pgxn install multicorn就没报错了。

CSV Foreign Data Wrapper

Purpose

这个fdw被使用连接存储的csv文件,表中定义的每个列都将按照CSV文件中的列进行映射。

Usage example

我们使用/tmp/test.csv,其内容如下:

代码语言:javascript复制
Year,Make,Model,Length
1997,Ford,E350,2.34
2000,Mercury,Cougar,2.38

postgresql中声明外部表:

代码语言:javascript复制
CREATE SERVER csv_srv foreign data wrapper multicorn options (
    wrapper 'multicorn.csvfdw.CsvFdw'
);


create foreign table csvtest (
       year numeric,
       make character varying,
       model character varying,
       length numeric
) server csv_srv options (
       filename '/tmp/test.csv',
       skip_header '1',
       delimiter ',');
       

select * from csvtest;
year |  make   | model  | length 
------ --------- -------- --------
 1997 | Ford    | E350   |   2.34
 2000 | Mercury | Cougar |   2.38
(2 rows)

0 人点赞