powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / OID Fields
8 сообщений из 8, страница 1 из 1
OID Fields
    #33245250
KoZma
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, подскажите, плз, как мне вставить insert'ом данные в OID поле.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE "ayz"."table2_sync" (
"field1" BYTEA,
"OIDF" OID
);

INSERT INTO "ayz"."table2_sync" ("field1", "OIDF") 
VALUES('str1\\015\\012str2\\015\\012str3', ???);
...
Рейтинг: 0 / 0
OID Fields
    #33247292
фффф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А это зависит от того, что должно лежать в OIDF. См. 8.12. Object Identifier Types.
...
Рейтинг: 0 / 0
OID Fields
    #33247485
KoZma
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
должен лежать BLOB, который храниться в pg_largeobject
...
Рейтинг: 0 / 0
OID Fields
    #33247536
KoZma
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по хорошему если мне какимнить образом получить OID, то можно будет сделать таким образом
Код: plaintext
1.
2.
3.
4.
5.
INSERT INTO "ayz"."table2_sync" ("field1", "OIDF") 
VALUES('str1\\015\\012str2\\015\\012str3', Взять_OID);

INSERT INTO pg_largeobject (loid, pageno, data) 
VALUES (Полученный_OID,  0 , 'oid1\\015\\012oid2\\015\\012oid3');
Вопрос стоит в том, как мне его получить... я видел только функцию, которой можно из файла сделать. а мне надо именно передать строкой. Может есть какенить другие варианты?
...
Рейтинг: 0 / 0
OID Fields
    #33247743
фффф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пытаетесь создать копию BLOBа? Если так - любой новый oid подойдет, он не какой-то особенный, лишь бы был уникальным.
Не знаю функции, которая бы делала "чистый" oid, не привязанный ни к какому объекту. Но можно например сделать lo_creat(-1), а потом ненужную пустую строку pg_largeobject удалить.
...
Рейтинг: 0 / 0
OID Fields
    #33247807
Фотография XM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KoZmaпо хорошему если мне какимнить образом получить OID, то можно будет сделать таким образом
Код: plaintext
1.
2.
3.
4.
5.
INSERT INTO "ayz"."table2_sync" ("field1", "OIDF") 
VALUES('str1\\015\\012str2\\015\\012str3', Взять_OID);

INSERT INTO pg_largeobject (loid, pageno, data) 
VALUES (Полученный_OID,  0 , 'oid1\\015\\012oid2\\015\\012oid3');
Вопрос стоит в том, как мне его получить... я видел только функцию, которой можно из файла сделать. а мне надо именно передать строкой. Может есть какенить другие варианты?
Что нибудь типа такого?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
CREATE OR REPLACE FUNCTION create_lo(_data bytea) RETURNS OID AS $$
DECLARE _new_lo OID;
        _handle INT;
        _tmp INT;
BEGIN
        _new_lo  := lo_creat( 2  <<  16 );
        _handle  := lo_open(_new_lo,  2  <<  16 );
        _tmp     := lowrite( _handle, _data);
        _tmp     := lo_close( _handle);
        return _new_lo;
END
$$ LANGUAGE 'plpgsql';

-- вставка
INSERT INTO  INSERT INTO "ayz"."table2_sync" ("field1", "OIDF") 
VALUES('str1\\015\\012str2\\015\\012str3', create_lo('oid1\\015\\012oid2\\015\\012oid3'::bytea));
...
Рейтинг: 0 / 0
OID Fields
    #33248762
KoZma
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 XM:
Спасибо, очень помогло, только еще маленький вопросик: можно ли это написать испольльзуя sql , а не pgplsql?
...
Рейтинг: 0 / 0
OID Fields
    #33261740
KoZma
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что, ни кто не знает?
по ходу что нельзя... :-(
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / OID Fields
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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