2013-02-22 40 views
1

我们的PostgreSQL运行在unix框上,并且多个用户同时拥有单独的unix帐户和单独的数据库登录名。那种工作流程,我们正在努力使这些用户的是:通过连接到远程PostgreSQL服务器访问文件系统

  1. 传输大文件到服务器(通常通过Samba)
  2. 建立从用户的PC远程连接到PostgreSQL
  3. 阅读把大文件放到一个(最好是临时的)表中并做一些分析

绊脚石是如何在登录PostgreSQL时访问文件。乍一看,这似乎无法安全地进行,因为数据库在postgres帐户下运行,该帐户甚至无法访问属于其他unix帐户的文件。开箱即用,我相信PostgreSQL用户可以访问本地文件的唯一方法是(a)使文件可以被postgres unix帐户读取,并且(b)为数据库用户提供较高的权限以允许他们使用COPY FROM命令在Postgres中。这是不可能的。用户不能读取彼此的数据。

我们目前使用的解决方法是将shell放入服务器并运行psql,它允许用户使用\copy元命令从本地文件中获取数据。但是这会使工作流程变得复杂,并且对于我们大多不熟悉unix的用户来说并不是很满意。相反,他们希望从基于PC的分析软件包SAS驱动整个过程,该软件包可以通过ODBC直接连接到Postgres。

我正在寻找针对此问题的创造性解决方案。显然,上面列出的天真的工作流程完全与unix安全模型不一致。但是,有没有一种替代方案可以从用户的角度同样起作用?我们很高兴考虑存储过程,中间人代理等。

回答

1

如果您的用户通过SAS连接,他们可以通过SAS-PSQL连接自己上传文件吗?作为SAS用户,这当然是可能的;像

libname psql odbc (connection-string); 
data psql.mytable; 
set sastable; 
run; 

当然,这需要它首先在本地读入SAS,但这很可能是微不足道的。这里的主要潜在问题是时间 - 这种方式转移无疑比SAMBA慢;但也许为了简单起见,花费的时间是值得的?

+0

是的,我们从这样的事情开始,但对于有数百万行的文件,我们经历了严重的减速。不过,绝对赞同你的简单性! – 2013-02-22 09:00:24

+0

数百万行应该仍然可以管理,如果他们插入正确。 PostgreSql是否具有批量插入功能?不知道SAS是否会支持它(它支持一些批量插入,而不支持其他),但如果它可以工作。如果没有,你是否至少插入一个临时(临时)表是空的,没有约束?然后,SAS可以切换到SQL模式(使用自己的语言直接向PostgreSQL发出命令,而不是使用SAS命令)。 – Joe 2013-02-22 09:04:11

+0

这可能是根本问题。我正在查看一些SAS文档,它似乎是说ODBC驱动程序只支持连接到SQL Server的批量加载?我很确定没有专门针对Postgres的SAS驱动程序,这就是我们使用ODBC的原因。 – 2013-02-22 09:14:20

相关问题