Я настраиваю базу данных postgreSQL для компании, чтобы помочь им разобраться в беспорядке файлов Excel с дублированными данными, слишком большим количеством версий и т. Д.
В компании, как правило, есть неопытные пользователи, которые будут отказываться отинтерфейс командной строки. Я предоставляю им достаточно запросов, чтобы можно было выполнить их работу, и я буду писать больше по мере необходимости. Они ожидают, что смогут стать достаточно опытными с PGAdmin 4.
Одной из основных задач будет обновление данных в постоянных таблицах, и им будет наиболее удобно обновлять файлы Excel, преобразовывать их в CSV и выполнять запрос. Я хочу позволить им сделать это, загрузив данные во временную таблицу с помощью команды COPY, а затем с помощью команд INSERT / UPDATE с условиями не перезаписывать / дублировать существующие строки с помощью предложения WHERE.
В двух словахЯ пытаюсь заставить их делать все, что им нужно от PGAdmin 4, и я застрял в той части, где они могут загрузить CSV-файл и обновить таблицы из этого. Пример запроса показан ниже.
Похоже, единственное решение, которое я нашел, - это выполнение / копирование из интерфейса командной строки, которого я пытаюсь избежать.
AWS RDS этого не делаетразрешить предоставление привилегий суперпользователя с созданной мной основной учетной записи. Также я не могу предоставить кому-либо роль pg_read_server_files.
Сначала они загрузят файл в temp_table:
CREATE TEMPORARY TABLE temp_table (
col1 TEXT,
col2 TEXT,
col3 TEXT,
col4 TEXT,
col5 TEXT
);
COPY temp_table (col1, col2, col3, col4, col5) FROM 'file_path' WITH DELIMITER ',' CSV HEADER;
Как только данные будут загружены в temp_table, они будут выполняться:
INSERT INTO persistent_table (col1, col2, col3, col4, col5)
SELECT col1, col2, col3, col4, col5
FROM temp_table
WHERE col1 NOT IN (SELECT col1 FROM persistent_table);
Первый бит кода дает мне эту ошибку.
ОШИБКА: должен быть суперпользователем или членом роли pg_read_server_files для КОПИРОВАНИЯ из файла
СОВЕТ: Любой можетСкопировать в стандартный вывод или из стандартного ввода. Команда psql \ copy также работает для всех.
Состояние SQL: 42501