- 环境:MacOS 10.12.6
开始说正题。
Redshift是基于PostgreSQL的二次开发应用,所以,能连接PostgreSQL的工具都可以用来连接Redshift。我选择的是使用最广泛的psycopg2
。
如果上来就执行:
1 | $ pip install psycopg2 |
你会看到下面的提示错误:
1 | Error: pg_config executable not found. |
提示需要一个叫做pg_config
的东西。pg_config
是个编译PostgreSQL源码后得到的一个文件。所以想要通过这种方式安装psycopg2
就需要手动去编译源码。
如果懒得编译,人家已经替你想好了办法,正如提示里所言,
1 | If you prefer to avoid building psycopg2 from source, please install the PyPI |
因此,通过下面命令安装删减版的psycopg2
,
1 | $ pip install psycopg2-binary |
然后,在本机上就可以正常使用了。
但是,Lambda不可以。不同于独立的机器,Lambda需要完整的依赖包才能执行。
在Github上搜到了awslambda-psycopg2,作者介绍说是专门解决在Lambda上使用psycopg2
的。
按照README.md
的步骤,先编译PostgreSQL,再用生成的pg_config
去编译psycopg2
。但执行后总会报一个错误,
1 | No module named 'psycopg2._psycopg' |
看着issue里面几个老外说来说去,也没说出个可行的解决方案。
几番尝试下来,终究是填了坑。
其实是编译环境的问题,在什么环境下编译生成的依赖包,只能在该环境下使用。Lambda是在Linux机器上执行的,所以必须在Linux上进行编译,生成的依赖包才可以使用。
就是这么简单。