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)