Quando eu faço isso:
COPY "mytable" FROM '/my/file.csv' WITH DELIMITER AS ',' CSV;
Nisto:
-rw-r--r-- 1 peter peter 54819176 2011-07-21 13:17 file.csv
psql me diz isso:
ERROR: could not open file "/my/file.csv" for reading: Permission denied
Como posso ler meu arquivo?? Obrigado!
--- Atualizar
Parece que algo chamado apparmor
é instalado por padrão no Ubuntu.
Parece ter a mesma funcionalidade do SELinux, mencionada nos comentários.
--- Atualizar
Depois de remover apparmor
, ainda tenho o mesmo problema. selinux
não está instalado.
Em relação ao comentário abaixo sobre o acesso, o COPY FROM está sendo executado a partir de uma conta de superusuário (se não dá uma mensagem de erro diferente) e as permissões do arquivo, copiadas acima, entendo como "legível por todos".
--- Atualizar
Eu tentei chegar ao arquivo sob o postgres
usuário. Ele fica preso em um determinado lugar na árvore
drwxr--r-- 6 peter peter 4096 2011-04-14 14:03 phm
postgres@dexter:/home/peter/PyPacks$ cd phm
bash: cd: phm: Permission denied
Acho que vou colocar o arquivo em outro lugar, mas isso é estranho!
Os diretórios precisam ser executáveis para poder cd neles (ou usar arquivos dentro deles).
/
Todo o subdiretório/home/peter/PyPacks/phm
precisa ser executável pelo usuário que você deseja usar para que isso funcione.Tente pelo menos
chmod 711 phm
(o que deve lhe darrwx--x--x
), ou talvezchmod 755 phm
(rwxr-xr-x
).r
para diretórios é a capacidade de listar seu conteúdo, não entrar neles (ou usar arquivos/diretórios dentro deles).Assumindo a
psql
ferramenta de linha de comando, você pode usar\copy
em vez decopy
.\copy
abre o arquivo e alimenta o conteúdo para o servidor, enquantocopy
diz ao servidor para abrir o próprio arquivo e lê-lo, o que pode ser problemático em termos de permissão, ou mesmo impossível se o cliente e o servidor forem executados em máquinas diferentes sem compartilhamento de arquivos entre eles .Sob o capô,
\copy
é implementadoCOPY FROM stdin
e aceita as mesmas opções do lado do servidorCOPY
.de https://stackoverflow.com/questions/19463074/postgres-error-could-not-open-file-for-reading-permission-denied
No Linux, o usuário postgres deve ter o direito de ler os arquivos e executar os diretórios. Ele também precisa de uma reinicialização do servidor PSQL.
Se você estiver em um Mac, coloque o arquivo csv no diretório '/tmp'. Nesse caso, o arquivo estaria acessível a todos os usuários, como pgadmin.