Ответ 1
Пользователь Postgres
должен иметь доступ для чтения в файле, из которого вы собираетесь скопировать.
Посмотрите эту статью, чтобы узнать, как изменить доступ к файлам безопасности в Windows.
Я использую PGAdmin 1.14.3.
Когда я пытаюсь выполнить команду импорта:
COPY grad(country_code, postal_code, place_name, admin_name1, admin_code1, admin_name2, admin_code2, admin_name3, admin_code3, latitude, longitude, accuracy)
FROM 'C:\\Users\\denis\\Desktop\\BP2Project\\USA\\US.txt';
Я получаю
ОШИБКА: не удалось открыть файл "C:\Users\denis\Desktop\BP2Project\USA\US.txt" для чтения: Разрешение отказало в состоянии SQL: 42501
Я просмотрел другие похожие вопросы, и ни одна из них не решила мою проблему.
Я вошел в систему как пользователь "postgres", который является суперпользователем. Я не понимаю, почему я пропускаю разрешения. Я нахожусь в Windows 7.
Пользователь Postgres
должен иметь доступ для чтения в файле, из которого вы собираетесь скопировать.
Посмотрите эту статью, чтобы узнать, как изменить доступ к файлам безопасности в Windows.
статья разрешений, указанная в ответе Houari и Flimzy является хорошим справочным материалом, но прямой ответ (быстрое исправление, которое я использовал):
Everyone
в поле "Введите имена объектов для выбора" в текстовой области.Теперь вы можете запустить инструкцию SQL COPY, которая должна получить доступ к этим файлам.
Everyone
в поле "Группа или имена пользователей:".Теперь были возвращены права на то, что они были.
Хорошо, так получилось, что команда COPY работает, чтобы экспортировать таблицу в CSV, шаг за шагом. Обратите внимание, что я использую pgAdmin 111.
Щелкните правой кнопкой мыши папку, содержащую файлы данных, для которых было отказано в доступе > , а затем нажмите "Свойства".
В окне Свойства папки выберите вкладку "Безопасность". Нажмите кнопку "Изменить".
В открывшемся окне "Разрешения для папки" нажмите кнопку "Добавить...". Введите "Все" в поле "Введите имена объектов для выбора" в текстовой области.
Нажмите "ОК", и окно закроется. Убедитесь, что для разрешений Read и Execute по умолчанию установлено значение Разрешить с помощью флажкa > check в предыдущем окне. Нажмите "ОК", и окно закроется.
Нажмите кнопку "Применить" в окне "Свойства папки".
Это сложная часть, внутри папки myExports создайте пустой CSV файл с нужным именем. Например employee.csv
Затем запустите команду "Копировать" следующим образом:
скопировать сотрудника в 'C:\myExports\employee.csv' delimiter ',' csv;
employee - это имя таблицы в этом примере.
Надеюсь, что это поможет.
Если вы не хотите предоставлять разрешения всем, вы можете добавить разрешения для учетной записи, которая запустила службу. На панели управления - "Администрирование" - "Службы" скопируйте имя учетной записи на вкладке "Вход". (В моей системе учетная запись называется "Сетевая служба".) Затем поделитесь папкой с CSV файлом с этим пользователем, как показано в ответе выше.
Ответы на эту проблему в разных потоках идут примерно так: 1. "Скажите мне, какую команду вы использовали" 2. "Убедитесь, что у вас есть права доступа" 3. "Просто используйте/скопируйте"
Я просто попробовал предоставить разрешения для всех в файле cvs, с которого я пытаюсь скопировать, и по-прежнему дает мне отказ в разрешении. Я думаю, что эта функциональность сломана и была разбита на несколько последовательных выпусков в нескольких последовательных версиях Windows.
для меня, и я потратил несколько долгих часов на это. У меня есть центральный db, находящийся на ящике HP с 14.04 postgresql-9.5 pgAdmin3 postgis-2.2, акции сделаны через tweeked долю Samba. Мои клиенты используют смесь окон 10.1, 7, 8.1, и у меня есть рабочий стол ubuntu 14.04.
Я работаю с большими таблицами, обновляющими записи и нормализующими данными, и создавал подпрограммы вокруг операторов копирования SQL из файлов CSV, которые были сделаны из основного COPY public.table_1 TO (папка общего доступа, которую я установил в Samba https://www.youtube.com/watch?v=ndAYZ0DJ-U4) '/srv/samba/share/[filename].csv'
Затем я могу обновить базу данных после того, как в таблицы были внесены изменения с помощью таблицы COPY_1 из '/srv/samba/share/test.csv' ИСПОЛЬЗОВАНИЕ DELIMITITERS ',' WITH NULL AS '' CSV HEADER; от любого из моих клиентов.
Ключевым моментом, который я смог определить, является то, что клиенты, выполняющие обновление, должны быть суперпользователями, также все должно связываться с точки зрения пользователей, поскольку здесь работают 4 сервера Postgresql, Samba, UNIX и WINS Все мои пользователи зарегистрированы на каждом из серверов с одним и тем же именем пользователя, и одним из основных факторов является его однородность.
Я долго пробовал переделывать и пробовать различные соглашения об именах, но в конце концов это было http://www.postgresql.org/message-id/[email protected]gov.au, которые меня отсортировали это было похоже на большой щелчок переключателя. chown 777 на ваших акциях и групповом менеджменте был важной кривой обучения, но, часы, которые я потратил на это, получат награды по линии... Любящий Ubuntu, любящий жизнь и любящий дух с открытым исходным кодом, но это может быть просто лишение сна ногами... ЭТО РАБОТАЕТ