|
Oid поле в Foreign Table, как получить bytea из Foreign Server?
|
|||
---|---|---|---|
#18+
Собственно, сабж. Версия базы - 9.4. Проблема возникла при проектировании центральной базы для публичного доступа (в режиме чтения), которая сливает данные из нескольких региональные баз. 1. При запросах ниже, функция lo_get лезет в pg_largeobject центральной базы. Естественно, ничего не находит. select lo_get(f1.col_oid) from foreign_table1 f1 where f1.col_oid = 333768; select lo_get(f2.col_oid) from foreign_table2 f2 where f2.col_oid = 333768; Таблицы foreign_table1 и foreign_table2 имеют идентичную структуру, с разных серверов, но имеют одинаковые Oid. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2017, 17:24 |
|
Oid поле в Foreign Table, как получить bytea из Foreign Server?
|
|||
---|---|---|---|
#18+
butcher40Собственно, сабж. Версия базы - 9.4. Проблема возникла при проектировании центральной базы для публичного доступа (в режиме чтения), которая сливает данные из нескольких региональные баз. 1. При запросах ниже, функция lo_get лезет в pg_largeobject центральной базы. Естественно, ничего не находит. select lo_get(f1.col_oid) from foreign_table1 f1 where f1.col_oid = 333768; select lo_get(f2.col_oid) from foreign_table2 f2 where f2.col_oid = 333768; Таблицы foreign_table1 и foreign_table2 имеют идентичную структуру, с разных серверов, но имеют одинаковые Oid. Я могу только рекомендовать использовать bytea поле вместо LO, будет больше пользы. Через FDW к удаленным LO по моему никак не подобраться. PS: можно попробовать сделать view на remote стороне вида Код: plsql 1. 2.
и к нему через fdw ходить.... в теории я не вижу почему это не будет работать. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2017, 17:55 |
|
Oid поле в Foreign Table, как получить bytea из Foreign Server?
|
|||
---|---|---|---|
#18+
Maxim Boguk Я могу только рекомендовать использовать bytea поле вместо LO, будет больше пользы. Через FDW к удаленным LO по моему никак не подобраться. PS: можно попробовать сделать view на remote стороне вида Код: plsql 1. 2.
и к нему через fdw ходить.... в теории я не вижу почему это не будет работать. Это и было сделано, как временное решение для materialized view. От oid пока сложно отказаться, ввиду завязки на него хибернейтовских драйверов и всякой лабуды. Просто странно, если oid не поддерживается на уровне fdw, то нафиг его вообще в foreign таблицах поддерживать. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2017, 19:25 |
|
Oid поле в Foreign Table, как получить bytea из Foreign Server?
|
|||
---|---|---|---|
#18+
butcher40, У LO свои собственные OID-ы, которые присваиваются в момент создания LO. Обычно их сохраняют в таблицах, чтобы потом можно было обратиться к нужным логически связанным LO. В вашем случае в `col_oid` храниться oid для LO, который привязан к записи. Т.е. в данном случае `oid` в название колонки — это выбор того, кто реализовывал этот функционал и создавал таблички. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2017, 20:59 |
|
Oid поле в Foreign Table, как получить bytea из Foreign Server?
|
|||
---|---|---|---|
#18+
butcher40Это и было сделано, как временное решение для materialized view. От oid пока сложно отказаться, ввиду завязки на него хибернейтовских драйверов и всякой лабуды. Просто странно, если oid не поддерживается на уровне fdw, то нафиг его вообще в foreign таблицах поддерживать. oid это просто идентификатор объекта в базе (внутри это обычный int), который совсем не обязательно ссылка на файл/large object, бывают просто таблицы с oid полем которое никак с large objects не связано. Т.е. oid поддерживается нормально, а вот доступ к удаленным large objects по oid нет (но это уже другой вопрос совсем). В теории вы вообще вместо lo_get(f1.col_oid) можете вызвать lo_get(1255756) и если такой large object есть - вы его получите, никакой магии там нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2017, 03:04 |
|
Oid поле в Foreign Table, как получить bytea из Foreign Server?
|
|||
---|---|---|---|
#18+
Maxim Bogukoid это просто идентификатор объекта в базе (внутри это обычный int), который совсем не обязательно ссылка на файл/large object, бывают просто таблицы с oid полем которое никак с large objects не связано. Т.е. oid поддерживается нормально, а вот доступ к удаленным large objects по oid нет (но это уже другой вопрос совсем). В теории вы вообще вместо lo_get(f1.col_oid) можете вызвать lo_get(1255756) и если такой large object есть - вы его получите, никакой магии там нет. "oid это просто идентификатор объекта в базе." - для foreign table - в УДАЛЕННОЙ БАЗЕ. Было бы логично пробрасывать в fwd вызов функций на удаленный сервер. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2017, 13:09 |
|
Oid поле в Foreign Table, как получить bytea из Foreign Server?
|
|||
---|---|---|---|
#18+
butcher40, Учитывая, что LO достаточно несуразное решение (есть более удобный `bytea`), проект не развивает это направление. Проброса ф-ий на удалённый сервер я бы не ждал, совсем. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2017, 13:15 |
|
Oid поле в Foreign Table, как получить bytea из Foreign Server?
|
|||
---|---|---|---|
#18+
butcher40Maxim Bogukoid это просто идентификатор объекта в базе (внутри это обычный int), который совсем не обязательно ссылка на файл/large object, бывают просто таблицы с oid полем которое никак с large objects не связано. Т.е. oid поддерживается нормально, а вот доступ к удаленным large objects по oid нет (но это уже другой вопрос совсем). В теории вы вообще вместо lo_get(f1.col_oid) можете вызвать lo_get(1255756) и если такой large object есть - вы его получите, никакой магии там нет. "oid это просто идентификатор объекта в базе." - для foreign table - в УДАЛЕННОЙ БАЗЕ. Было бы логично пробрасывать в fwd вызов функций на удаленный сервер. А как понять что lo_get(1255756) вы хотите удаленный обьект а не локальный, ведь ничего же не запрещает хранить обьекты в одной базе а их oids - в другой совсем. На этапе когда вызывается фукция - в нее просто Int приходит и никакой информации о том откуда этот инт пришел и что значит - нет и не может быть на уровне текущей архитектуры базы. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2017, 13:29 |
|
|
start [/forum/topic.php?fid=53&fpage=62&tid=1996057]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
34ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
others: | 291ms |
total: | 421ms |
0 / 0 |