我们的PostgreSQL运行在unix框上,并且多个用户同时拥有单独的unix帐户和单独的数据库登录名。那种工作流程,我们正在努力使这些用户的是:通过连接到远程PostgreSQL服务器访问文件系统
- 传输大文件到服务器(通常通过Samba)
- 建立从用户的PC远程连接到PostgreSQL
- 阅读把大文件放到一个(最好是临时的)表中并做一些分析
绊脚石是如何在登录PostgreSQL时访问文件。乍一看,这似乎无法安全地进行,因为数据库在postgres
帐户下运行,该帐户甚至无法访问属于其他unix帐户的文件。开箱即用,我相信PostgreSQL用户可以访问本地文件的唯一方法是(a)使文件可以被postgres
unix帐户读取,并且(b)为数据库用户提供较高的权限以允许他们使用COPY FROM
命令在Postgres中。这是不可能的。用户不能读取彼此的数据。
我们目前使用的解决方法是将shell放入服务器并运行psql
,它允许用户使用\copy
元命令从本地文件中获取数据。但是这会使工作流程变得复杂,并且对于我们大多不熟悉unix的用户来说并不是很满意。相反,他们希望从基于PC的分析软件包SAS驱动整个过程,该软件包可以通过ODBC直接连接到Postgres。
我正在寻找针对此问题的创造性解决方案。显然,上面列出的天真的工作流程完全与unix安全模型不一致。但是,有没有一种替代方案可以从用户的角度同样起作用?我们很高兴考虑存储过程,中间人代理等。
是的,我们从这样的事情开始,但对于有数百万行的文件,我们经历了严重的减速。不过,绝对赞同你的简单性! – 2013-02-22 09:00:24
数百万行应该仍然可以管理,如果他们插入正确。 PostgreSql是否具有批量插入功能?不知道SAS是否会支持它(它支持一些批量插入,而不支持其他),但如果它可以工作。如果没有,你是否至少插入一个临时(临时)表是空的,没有约束?然后,SAS可以切换到SQL模式(使用自己的语言直接向PostgreSQL发出命令,而不是使用SAS命令)。 – Joe 2013-02-22 09:04:11
这可能是根本问题。我正在查看一些SAS文档,它似乎是说ODBC驱动程序只支持连接到SQL Server的批量加载?我很确定没有专门针对Postgres的SAS驱动程序,这就是我们使用ODBC的原因。 – 2013-02-22 09:14:20