Laravel 5.5 - DB :: ошибка оператора с командой \ copy (POSTGRES) - PullRequest
0 голосов
/ 30 октября 2018

Я пытаюсь использовать команду \ copy из POSTGRES, используя laravel 5.5, чтобы вставить большой файл в БД, но я получаю эту ошибку ниже.

Я пробовал так:

DB::statement( DB::raw("\\copy requisicoes FROM '".$file1."' WITH DELIMITER ','"));

Получите эту ошибку:

SQLSTATE [42601]: Синтаксическая ошибка: 7 ОШИБКА: синтаксическая ошибка в или рядом с "\" LINE 1: \ copy Requisicoes FROM '/ srv / www / bilhetagem_logs / bilhetagem _... ^ (SQL: \ copy Requisicoes FROM' / srv / www / bilhetagem_logs / bilhetagem_log1_2018-10-29 'С РАЗДЕЛИТЕЛЕМ', ')

Пробовал тоже так:

DB::statement( DB::raw('\copy requisicoes FROM \''.$file1.'\' WITH DELIMITER \',\''));

Получите эту ошибку:

SQLSTATE [42601]: Синтаксическая ошибка: 7 ОШИБКА: синтаксическая ошибка в или рядом с "\" LINE 1: \ copy Requisicoes FROM '/ srv / www / bilhetagem_logs / bilhetagem _... ^ (SQL: \ copy Requisicoes FROM' / srv / www / bilhetagem_logs / bilhetagem_log1_2018-10-29 'С РАЗДЕЛИТЕЛЕМ', ')

Если я выполню команду, которая возвращает ошибку, описанную выше, с помощью команды psql line, то все будет нормально

\copy requisicoes FROM '/srv/www/bilhetagem_logs/bilhetagem_log1_2018-10-29' WITH DELIMITER ','

Может ли кто-нибудь мне помочь? :)

Я должен использовать \ copy вместо копии, потому что у меня нет привилегий суперпользователя на БД. https://www.postgresql.org/docs/9.2/static/sql-copy.html

Копирование имен файлов разрешено только суперпользователям базы данных, поскольку оно позволяет читать или записывать любой файл, к которому у сервера есть права доступа.

1 Ответ

0 голосов
/ 30 октября 2018

См. эту статью на PostgreSQL и обратите внимание на эту строку:

Не путайте COPY с инструкцией psql \ copy. \ copy вызывает COPY FROM STDIN или COPY TO STDOUT, а затем извлекает / сохраняет данные в файл, доступный для клиента PSQL. Таким образом, доступность файлов и права доступа зависят от клиента, а не от сервера, когда \ копировать используется.

\copy - это инструкция psql, поэтому вам не нужно писать \copy, просто COPY.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...