Gawk - PostgreSLQ

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
kharkov_max
капитан
Сообщения: 1853
Зарегистрирован: 2008-10-03 14:56:40

Gawk - PostgreSLQ

Непрочитанное сообщение kharkov_max » 2011-05-20 13:48:01

День добрый.

Есть задачка парсить лог в базу данных 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 или какой нить другой метод...
Спасибо.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Gawk - PostgreSLQ

Непрочитанное сообщение kpp » 2011-05-21 0:08:18

А надо как? Если так:

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

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
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

Аватара пользователя
kharkov_max
капитан
Сообщения: 1853
Зарегистрирован: 2008-10-03 14:56:40

Re: Gawk - PostgreSLQ

Непрочитанное сообщение kharkov_max » 2011-05-21 8:10:11

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 от пользователя конкретной базы данных.

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

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Gawk - PostgreSLQ

Непрочитанное сообщение kpp » 2011-05-21 21:12:53

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

copy log (name1,name2) from '/catalog/file' wiht delimiter ';'
Это что за конструкция? Запускается утилитой Постгреса?
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

Аватара пользователя
kharkov_max
капитан
Сообщения: 1853
Зарегистрирован: 2008-10-03 14:56:40

Re: Gawk - PostgreSLQ

Непрочитанное сообщение kharkov_max » 2011-05-21 23:33:57

Да.
По сути это команда SQL ...
Как минимум я ее так вызываю из консоли ...