powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / COPY и SERIAL
7 сообщений из 7, страница 1 из 1
COPY и SERIAL
    #32322407
Konrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую всех!

Исходная задача. Регулярно (с периодичностью 2 раза в сутки) необходимо получать данные, снимаемые с датчиков технологических процессов производства. Полученные данные нужно сохранить в таблицах БД.

Как это работает. Данные снимаются программой, написанной для терминалов, и к моему серверу БД никакого отношения не имеющей. Ребята, писавшие в свое время данную программу, готовы ее доработать таким образом, чтобы она выкладывала по ftp-протоколу эти данные с нужной периодичностью в файл (обычный, flat).

Планир(овал?)ую реализовать регулярную заливку полученных файлов в таблицы с помощью cron командой COPY. Но в данном решении есть подводные камни - автоинкрементные столбцы таблиц. Так как сама по себе команда COPY не дает возможности указывать набор атрибутов, оперируя в каждом случае всей таблицей, то рассинхронизация уникальных идентификаторов, генерируемых с помощью последовательностей, обеспечена. Соответственно, в лучшем случае по завершении COPY я получу сбитое значение nextval, в худшем - команда вообще не пройдет из-за дублирующихся ключей (в любом случае, оба варианта заведомо неприемлемы, поэтому что хуже, а что лучше - это все условно-относительно).

Заставлять программистов АСУТП генерировать файлы с готовыми наборами SQL-команд мне пока не хочется :), изначально я расчитывал на простые текстовые файлы данных с разделителями.

Есть какие-нибудь идеи, как обойти проблему?
...
Рейтинг: 0 / 0
COPY и SERIAL
    #32322421
Konrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно, как выход: файл -> временная таблица -> основная таблица. Но, возможно, проблему можно решить более изящно (или эффективно)..
...
Рейтинг: 0 / 0
COPY и SERIAL
    #32322670
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В команде COPY можно указывать список полей таблицы.
...
Рейтинг: 0 / 0
COPY и SERIAL
    #32322689
Konrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 LeXa NalBat
Версия PG?

7.2.1., по-моему, не позволяет

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
db=# \h copy
Команда:     COPY
Описание: copy data between files and tables
Синтаксис:
COPY [ BINARY ] table [ WITH OIDS ]
    FROM { 'filename' | stdin }
    [ [USING] DELIMITERS 'delimiter' ]
    [ WITH NULL AS 'null string' ]
COPY [ BINARY ] table [ WITH OIDS ]
    TO { 'filename' | stdout }
    [ [USING] DELIMITERS 'delimiter' ]
    [ WITH NULL AS 'null string' ]
...
Рейтинг: 0 / 0
COPY и SERIAL
    #32322734
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Версия 7.3. В 7.2 этого действительно не было. :(
...
Рейтинг: 0 / 0
COPY и SERIAL
    #32322849
Konrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OK, спасибо! Сам, наверное, и не полез бы смотреть наличие нужной мне функциональности в более поздних версиях :)

Теперь, пожалуй, окончательного релиза 7.4 дожидаться не буду (планировал дотянуть) :)
...
Рейтинг: 0 / 0
COPY и SERIAL
    #32323100
Shweik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думаю что более быстрого решени чем COPY не найти -
особенно если файл на вход тебе генерит программа с железки, а
не оператор, путающий тройки с девятками 8)) .
PostgreSQL 7.3 Documentation:
Name
COPY -- copy data between files and tables
Synopsis
COPY table [ ( column [, ...] ) ]
FROM { 'filename' | stdin }
[ [ WITH ]
[ BINARY ]
[ OIDS ]
[ DELIMITER [ AS ] 'delimiter' ]
[ NULL [ AS ] 'null string' ] ]
COPY table [ ( column [, ...] ) ]
TO { 'filename' | stdout }
[ [ WITH ]
[ BINARY ]
[ OIDS ]
[ DELIMITER [ AS ] 'delimiter' ]
[ NULL [ AS ] 'null string' ] ]
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / COPY и SERIAL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]