Вызов команды psql из скрипта Groovy - PullRequest
2 голосов
/ 05 марта 2012

Я пишу отличный скрипт, который должен копировать данные из файла в таблицу (база данных Postgres). Я мог бы использовать команду SQL COPY, но для этого требуется, чтобы скрипт запускался как суперпользователь (это не вариант, который я могу использовать). Другой альтернативой является использование \ COPY, которая является командой psql. Но psql - это инструмент командной строки для PostgresSQL. Есть ли способ вызвать \ COPY из скрипта Groovy?

Я попробовал следующее:

// groovy method to populate table
populateTable( tableName, filePath ) {

    def command = """psql -U<database name>"""
    def proc = command.execute()                
    proc.waitFor()                                

    command = """ \\COPY $tableName FROM '$filePath' WITH DELIMITER AS ','"""
    proc = command.execute()                
    proc.waitFor()  
}

В приведенном выше коде я пытаюсь выполнить вход в командную строку psql, а затем выполнить команду \ COPY, но я получаю следующую ошибку:

java.io.IOException: Cannot run program "\COPY": java.io.IOException: error=20, Not a directory

Просто интересно, можно ли вызвать \ COPY из скрипта? Если нет, есть ли другой способ массового копирования данных из файла в таблицу? Это огромный файл, и копирование строка за строкой будет очень неэффективным.

Большое спасибо заранее за вашу помощь.

1 Ответ

1 голос
/ 06 марта 2012

Ваш код в настоящее время выполняет две отдельные вещи psql и \COPY (которые не найдены с учетом введенного вами сообщения об ошибке). Я не такой знакомый Postgres, как MySQL, но, глядя на документацию psql , вы можете передать команду для запуска с использованием параметра -c:

def populateTable( tableName, filePath ) {
    def sql = """ \\COPY $tableName FROM '$filePath' WITH DELIMITER AS ',' """
    def command = """psql -U<database name> -c "$sql" """
    def proc = command.execute()
    proc.waitFor()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...