Страница 1 из 1

Gawk - PostgreSLQ

Добавлено: 2011-05-20 13:48:01
kharkov_max
День добрый.

Есть задачка парсить лог в базу данных PostgreSQL.
Но возникла незадача с gawk, для разбора строки нужно использовать именно его...

Если делаю так:

Код: Выделить всё

$gawk '{FS="[ ]+"} {print "INSERT INTO log (name1,name2) \
                   VALUES (\""$2"\",\""$3"\");"}' $log_file > $tmp_file
То postgresql ругается на "" т.к. строка для него получается такая:

Код: Выделить всё

INSERT INTO log (name1,name2) VALUES ("name1","name2'');
Если делаю так, как нужно postgresql:

Код: Выделить всё

$gawk '{FS="[ ]+"} {print "INSERT INTO log (name1,name2) \
                   VALUES ('$2','$3');"}' $log_file > $tmp_file
то gawk выводит пустые данные, т.к. не верен его синтаксис.

Код: Выделить всё

INSERT INTO log (name1,name2) VALUES (,);
и sql ругается что нет данных.

Подскажите пожалуйста как правильно экранировать строки для SQL или какой нить другой метод...
Спасибо.

Re: Gawk - PostgreSLQ

Добавлено: 2011-05-21 0:08:18
kpp
А надо как? Если так:

Код: Выделить всё

INSERT INTO log (name1,name2) VALUES ('name1','name2');
то

Код: Выделить всё

$gawk '{FS="[ ]+"} {print "INSERT INTO log (name1,name2) \
                   VALUES (\047"$2"\047,\047"$3"\047);"}' $log_file > $tmp_file

Re: Gawk - PostgreSLQ

Добавлено: 2011-05-21 8:10:11
kharkov_max
kpp писал(а):А надо как? Если так:

Код: Выделить всё

INSERT INTO log (name1,name2) VALUES ('name1','name2');
то

Код: Выделить всё

$gawk '{FS="[ ]+"} {print "INSERT INTO log (name1,name2) \
                   VALUES (\047"$2"\047,\047"$3"\047);"}' $log_file > $tmp_file
Огромное спасибо, работает. Как раз то что нужно.

Паралельно пошел через метод:

Код: Выделить всё

copy log (name1,name2) from '/catalog/file' wiht delimiter ';'
Тоже работает, но запускать приходится только от супер юзера SQL сервера, думаю что для загрузки большого кол-ва данных мотод copy предпочтительнее.
Не подскажете как запустить copy от пользователя конкретной базы данных.

В любом варианте огромное спасибо.

Re: Gawk - PostgreSLQ

Добавлено: 2011-05-21 21:12:53
kpp

Код: Выделить всё

copy log (name1,name2) from '/catalog/file' wiht delimiter ';'
Это что за конструкция? Запускается утилитой Постгреса?

Re: Gawk - PostgreSLQ

Добавлено: 2011-05-21 23:33:57
kharkov_max
Да.
По сути это команда SQL ...
Как минимум я ее так вызываю из консоли ...