2015-02-03 2 views
1

Я пытаюсь экспортировать запрос в файл csv с помощью команды COPY в pgAdminIII.Postgres COPY to CSV

Я использую эту команду:

COPY (SELECT CASE WHEN cast(click as int) = 1 THEN 1 
    ELSE -1 
    END 
    || ' ' 
    || id 
    || '|' 
    || 'hr_' || substring(hour, 7,8) 
    --|| ' dw_x' + substring(datename(dw, substring(hour,1,6)),1,2) 
    || ' |dw_' || substring(to_char(to_date(substring(hour, 1,6),'YYMMDD'), 'dy'),1,2) 
    || ' |C1_' || c1 
    || ' |C21_' || c21 
    || ' |C22_' || substring(to_char(to_date(substring(hour, 1,6),'YYMMDD'), 'dy'),1,2) || '_' || substring(hour, 7,8) 
    AS COL1  
    FROM clickthru.train limit 10)  
    TO 'C:\me\train.csv' with csv; 

Когда я запускаю его я получаю:

ERROR: could not open file "C:\me\train.csv" for writing: Permission denied 
SQL state: 42501 

Затем я попытался с помощью следующих в PSQL:

grant all privileges on train to public 

, а затем посмотрите права доступа с помощью \ z, который возвращает:

enter image description here

, но я все еще получаю ту же ошибку. Я использую postgresql 9.4 в окне Windows 7. Любые другие предложения?

ответ

0

copy пишет файл под учетной записью пользователя сервера Postgrs процесс (это операция на стороне сервера).

From the manual:

Файл должен быть доступен пользователю PostgreSQL (пользователь ID сервер работает как) и имя должно быть указано, с точки зрения сервера

Под Windows это системная «Сетевая учетная запись» по умолчанию.

По-видимому, у этой учетной записи нет прав записи в этом каталоге.

У вас есть два возможных пути решения, что:

  1. изменить привилегии на каталог, чтобы позволить Everybody полный доступ
  2. использовать команду на стороне клиента \copypsql) вместо