172 похожих чатов

Привет всем, подскажите, пожалуйста, как правильно сделать вставку в

поле bytea

Есть таблица
create table testtable( col bytea[5])

Так-же у меня есть 2 переменные типа smallint
a smallint, b smallint

Я хочу вставить в таблицу данные в виде двоичного формата
Только вот даже не знаю, как правильно это сформулировать

Объясню на примере:

a = 3 (0x0003)
b = 1 (0x0001)
-- Добавляем нули впереди, чтобы видно было ограничение smallint

insert into testtable( col ) values ( <Что тут писать> ? );
Чтобы вставилось следующее:
0x00 00 03 00 01 -- отделю байты пробелами, чтобы было понятней

т.е. в 1-0 байты записываем значение b, в 3-2 байты - a, 4 байт оставляем 0
Понимаю, что надо использовать &, но только как правильно ?

23 ответов

7 просмотров
Егор-miruzzy Автор вопроса

Yaroslav не подскажешь тут?

INSERT INTO testtable(col) VALUES (decode('aaabbbfff', 'hex'))

Егор-miruzzy Автор вопроса
Dmitriy Sviridov
INSERT INTO testtable(col) VALUES (decode('aaabbb...

так а как слить 2 переменные smallint в одну последовательность байт ?

Это не поле bytea, это массив из пяти bytea. Что Вам на самом деле нужно?

Yaroslav Schekin
Это не поле bytea, это массив из пяти bytea. Что В...

Уточнение: текущая реализация не ограничивает размер массивов. Поэтому 5 в bytea[5] - это так, для документации.

Егор-miruzzy Автор вопроса
Yaroslav Schekin
Это не поле bytea, это массив из пяти bytea. Что В...

Суть вот в чём была таблица логирования create table .... ( a smallint, b smallint, c smallint); Но все эти переменные имеют значения 0..100 ) Что в принципе может помещаться в 1 байт Вот и мы хотим 3 2-байтовых числа запихнуть в колонку с 3-мя байтами

Егор-miruzzy Автор вопроса
Dima Igrishin
Уточнение: текущая реализация не ограничивает разм...

не обязательно bytea[5] мне нужна реализация, описанная сообщением выше

Егор-miruzzy Автор вопроса
Dima Igrishin
Вы с клиента хотите это сделать?

нет, именно в БД, в функциях на pl/psql

Егор miruzzy
Суть вот в чём была таблица логирования create ta...

Ну так, например (если я правильно понял): SELECT set_byte('x', 0, 1) || set_byte('x', 0, 2) || set_byte('x', 0, 3); > не обязательно bytea[5] Это массив из пяти bytea (условно, как выше написали), каждое произвольной длины, а не bytea длины 5, ещё раз.

Егор-miruzzy Автор вопроса
Yaroslav Schekin
Ну так, например (если я правильно понял): SELECT ...

понял, значит мне нужно создавать таблицу create table test ( data bytea ); А как впихнуть туда эти smallint ?

Егор miruzzy
понял, значит мне нужно создавать таблицу create...

Вы пробовали то, что я написал выше? Это чем-то не подходит?

Егор miruzzy
понял, значит мне нужно создавать таблицу create...

Или так: dmitigr=> create table foo(id serial not null, dat bytea not null); CREATE TABLE dmitigr=> insert into foo(dat) select (1::int2::text || 2::int2::text || 3::int2::text)::bytea; INSERT 0 1 Time: 4,144 ms dmitigr=> select * from foo; id | dat ----+---------- 1 | \x313233 (1 row)

Егор miruzzy
понял, значит мне нужно создавать таблицу create...

А в чем экономия по сравнению с одним integer, в удобстве доступа из приложения?

Егор-miruzzy Автор вопроса
Konstantin Zaitsev
А в чем экономия по сравнению с одним integer, в у...

мне нужно впихнуть 3 smallint ( 2 байт ) 2 int8_t ( 1 байт ) 1 int ( 4 байт ) В массив байт, размером 12

Егор miruzzy
мне нужно впихнуть 3 smallint ( 2 байт ) 2 int8_t...

A так понятнее👍, просто 3 smalint изначальных не давали экономии в bytea

Konstantin Zaitsev
A так понятнее👍, просто 3 smalint изначальных не д...

Почему не давали? 3 * sizeof(int2) = 6 байт. А 3 байта в bytea= 4 байта.

Konstantin Zaitsev
3 int2 = 1 integer

нет. integer 4 байта

Konstantin Zaitsev
3 int2 = 1 integer

При условиях автора задачи

Похожие вопросы

Обсуждают сегодня

А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Подскажите, где смотреть результат выполнения программы? Код: ;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, станда...
Егор Анелькин
5
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, стандартный ;вызов процедуры ;option casemap:no...
Егор Анелькин
1
почому оно не работает?
Vi Chapmann Chapmann
19
Так а кто может спарсить всех участников чата? Идишники
Magic
18
Есть вопрос: допустим есть железка с каким-то интерфейсом(допустим usb), но как по этому интерфейсу железкой управлять неизвестно, прог нету, а управлять очень хочется надо. К...
Mixail Frolov
15
а как ловят такое ghci> res <- getPos2 urlt 0 (alist !! 0) 200 ghci> res SearchAtom (Search "www.google.com" "/search?q=" "Haskell") "haskell.org" (SearchTS [(2024-05-06 07:...
Fedor
14
короче сгенерила мне эта штука код на ассемблере: struc string val { common local .value dq .value .value: if ~val eq db val end if db 0 } fo...
Vi Chapmann Chapmann
12
Карта сайта