У нас есть PostgreSQL, работающий на unix-боксе, и несколько пользователей с отдельными учетными записями unix и отдельными входами в базу данных. Вид процесса мы пытаемся включить для этих пользователей:Доступ к файловой системе через соединение с удаленным сервером PostgreSQL
- Передача большого файла на сервер (обычно через Samba)
- установить удаленное соединение с ПК пользователя к PostgreSQL
- Читать большой файл в таблицу (желательно временную) и сделать некоторый анализ
Камнем преткновения является доступ к файлу во время входа в PostgreSQL. На первый взгляд это кажется невозможным сделать безопасно, поскольку база данных работает под учетной записью postgres
, которая даже не имеет доступа к файлам, принадлежащим другим учетным записям unix. Я полагаю, что единственным способом, с помощью которого пользователи PostgreSQL могли обращаться к локальным файлам, было бы: (a) сделать файлы доступными для чтения учетной записью unix postgres
и (b) предоставить пользователям прав доступа к базе данных, чтобы они могли использовать COPY FROM
команда в Postgres. Об этом не может быть и речи; пользователи не могут читать данные друг друга.
Обходной путь, который мы в настоящее время используем, заключается в оболочке на сервер и запуске psql
, что позволяет пользователю обрабатывать данные из локального файла, используя мета-команду \copy
. Но это усложняет рабочий процесс и не очень удовлетворяет наших пользователей, которые в основном не знакомы с UNIX. Вместо этого они хотели бы управлять всем процессом из пакета аналитики на базе ПК под названием SAS, который может напрямую подключаться к Postgres через ODBC.
Я ищу творческое решение этой проблемы. Очевидно, что наивный рабочий процесс, описанный выше, полностью противоречит модели безопасности unix. Но есть ли альтернатива, которая будет функционировать аналогично с точки зрения пользователя? Мы с удовольствием рассмотрим хранимые процедуры, прокси-серверы «человек-в-середине» и т. Д.
Да, мы начали с чего-то подобного, но для файлов с миллионами строк мы испытываем серьезные замедления. Абсолютно соглашайтесь с вами о простоте! –
Миллионы строк должны по-прежнему быть управляемыми, если они вставлены правильно. Имеет ли PostgreSql возможность объемной вставки? Не уверен, поддерживает ли SAS или нет (он поддерживает некоторые объемные вставки, а не другие), но если это может сработать. Если нет, вы хотя бы вставляете во временную (промежуточную) таблицу, которая пуста и не имеет ограничений? Затем SAS может перейти в режим SQL (выдавая команды PostgreSQL непосредственно на своем языке, а не используя команды SAS). – Joe
Это может быть проблема с корнем. Я смотрю на какую-то документацию по SAS, которая, кажется, говорит, что драйвер ODBC поддерживает только массовую загрузку для подключений к SQL Server? И я уверен, что для Postgres нет драйвера SAS, поэтому мы используем ODBC. –