Todos os produtos
Search
Central de documentação

ApsaraDB RDS:O que fazer se ocorrer um erro ao usar o comando COPY para importar dados para uma instância do ApsaraDB RDS for PostgreSQL?

Última atualização: Jun 26, 2026

O ApsaraDB RDS for PostgreSQL não concede privilégios de superusuário, que são exigidos pelo comando COPY no lado do servidor. Use o meta-comando \copy do psql — ele roda no lado do cliente e não requer privilégios de superusuário.

Por que esse erro ocorre

ERROR:  must be superuser to COPY to or from a file
HINT:  Anyone can COPY to stdout or from stdin. psql's \copy command also works for anyone.

O comando padrão COPY lê e grava arquivos diretamente no servidor de banco de dados, exigindo privilégios de superusuário para acessar esses caminhos no servidor. Como o ApsaraDB RDS for PostgreSQL não oferece suporte a acesso de superusuário, o comando sempre falha ao referenciar um caminho de arquivo.

Corrigir o erro

Use o meta-comando \copy do psql. Ao contrário do COPY, o \copy roteia os dados pelo cliente (sua máquina local) em vez de ler arquivos no servidor. O acesso aos arquivos e os privilégios são os do usuário local — sem necessidade de privilégios de superusuário.

Execute o seguinte comando dentro do shell do psql:

\copy <table_name> (<column1>, <column2>, ...) FROM '<path/to/file.csv>' WITH CSV

Exemplo usando a tabela do erro original:

\copy mp3 (NAME,city,nation,lat,lng,url,mediatype,type) FROM '/home/alex/tmp/pos.csv' WITH CSV

Se o comando for executado com êxito, o psql exibe o número de linhas importadas:

COPY 42

Alternativa: redirecionar um arquivo CSV pelo psql

Para automatizar a importação em scripts ou quando não for possível usar o shell interativo do psql, redirecione o arquivo via stdin:

cat <table_name>.csv | psql -h <host> -p <port> -U <username> -c "COPY <table_name> FROM STDIN"

Substitua os seguintes marcadores pelos valores reais:

Marcador

Descrição

<table_name>

Nome da tabela de destino no banco de dados

<host>

Hostname ou endereço IP da sua instância RDS

<port>

Número da porta da sua instância RDS

<username>

Nome de usuário utilizado para acessar a instância RDS

Para grandes volumes de dados, essa abordagem transfere todos os dados pela conexão cliente-servidor, o que pode ser mais lento do que um COPY direto no servidor. Nesses casos, considere usar pg_dump e pg_restore.

Próximos passos

Para migrar dados de uma instância PostgreSQL autogerenciada para o ApsaraDB RDS for PostgreSQL, consulte Usar pg_dump e pg_restore para migrar dados de uma instância PostgreSQL autogerenciada para uma instância do ApsaraDB RDS for PostgreSQL.