|
Сохранить поле bytea в файл в триггере
|
|||
---|---|---|---|
#18+
Имеем таблицу: Код: plsql 1. 2. 3. 4.
Данные постоянно добавляются, но содержимое поля bytea используется редко, внутри текст, но запросов по содержимому нет. Т.к. по сути бинарные данные хранятся в БД это вызывает излишнюю нагрузку. Возникла идея (не меняя логику legacy-системы) хранить BLOB-ы просто в файловой системе: 1. По аналогии с хранением кеша squid создадим структуру папок: /var/lib/postgresql/{00..FF} (или даже двухуровневую /var/lib/postgresql/{00..FF}/{00..FF} 2. При вставке данных триггером с помощью команды COPY BYNARY экспортировать значение поля в файл, в БД записывать null 3. При выборке поля из БД "подставлять" содержимое с помощью механизма RULES Postgresql Как правильно написать триггер? Или может идея в корне неправильная, тогда подскажите как можно сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2017, 12:22 |
|
Сохранить поле bytea в файл в триггере
|
|||
---|---|---|---|
#18+
mihmih, а чем не устраивает lo 777 https://www.postgresql.org/docs/current/static/largeobjects.html тем , что сделано за вас 777 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2017, 13:27 |
|
Сохранить поле bytea в файл в триггере
|
|||
---|---|---|---|
#18+
qwwq, Не надо LO. Лучше всего заморочиться и выпилить это всё из базы совсем. Тем более если никому особо и не нужно. Или же скриптом архивацию производить. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2017, 13:35 |
|
Сохранить поле bytea в файл в триггере
|
|||
---|---|---|---|
#18+
Как я понял, lo - это фишка для клиента (хранение больших бинарных объёмов в БД), работа через специальные дескрипторы. У меня же задача - решить проблему хранения не затрагивая клиента. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2017, 15:33 |
|
Сохранить поле bytea в файл в триггере
|
|||
---|---|---|---|
#18+
mihmihКак я понял, lo - это фишка для клиента (хранение больших бинарных объёмов в БД), работа через специальные дескрипторы. У меня же задача - решить проблему хранения не затрагивая клиента. LO- оставлена для совместимости. Скорее всего. выпилят в будущих версиях. Пользоваться не рекомендую, т.к. есть застарелые проблемы и косяки. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2017, 15:52 |
|
Сохранить поле bytea в файл в триггере
|
|||
---|---|---|---|
#18+
mihmih, см . например. 12677917 или более широко 00 http://www.sql.ru/forum/actualsearch.aspx?search=pg_file_write&sin=0&bid=7&a=&ma=0&dt=-1&s=1&so=1 насколько это ( 12677917 ) кошерно -- не знаю, но работает зы : https://www.postgresql.org/docs/current/static/adminpack.html ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2017, 17:32 |
|
Сохранить поле bytea в файл в триггере
|
|||
---|---|---|---|
#18+
mihmihТ.к. по сути бинарные данные хранятся в БД это вызывает излишнюю нагрузку. Какую именно излишнюю нагрузку? Вы уверены, что проблема излишней нагрузки именно в этом? mihmihИли может идея в корне неправильная, тогда подскажите как можно сделать? Вы понимаете, что это совсем не одно и то же, и в результате ACID в отношении этого поля у Вас уже не будет? Если Вас это устраивает, то вариант с adminpack может подойти. Кстати, mihmihПри выборке поля из БД "подставлять" содержимое с помощью механизма RULES Postgresql можете просто использовать VIEW, RULES на SELECT ничего большего всё равно не дают, а работать с VIEW проще, IMHO. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2017, 22:55 |
|
|
start [/forum/topic.php?fid=53&fpage=75&tid=1996591]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 146ms |
0 / 0 |