powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / А как в Postgres обстоит дело с типом byte?
10 сообщений из 10, страница 1 из 1
А как в Postgres обстоит дело с типом byte?
    #35228148
Ega
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
т.е. значения - 0..255 ?
"char" не хочется использовать из-за преобразований.

И второй вопрос: каким образом Postgres хранит boolean? На 8 полей boolean отводит байт, и в нём по маске смотрит? Или на каждый столбец boolean отводит байт?
...
Рейтинг: 0 / 0
А как в Postgres обстоит дело с типом byte?
    #35228255
Thamerlan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Типа byte нет. Минимальное целочисленное smallint.
Поиск 1
Поиск 2

P.s.
Вы не родственник Winnipuh\'а?
...
Рейтинг: 0 / 0
А как в Postgres обстоит дело с типом byte?
    #35228290
Dan Black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ThamerlanВы не родственник Winnipuh'а? +1 Офтопик, но не могу удержаться
...
Рейтинг: 0 / 0
А как в Postgres обстоит дело с типом byte?
    #35228369
Ega
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ThamerlanТипа byte нет. Минимальное целочисленное smallint.
Поиск 1
Поиск 2


Откровенно говоря, я первым делом пользуюсь поиском по форуму, потом гуглю. Так что я на 95% вопросов ответ нахожу, сюда вопросы задаю только на оставшиеся 5. :)

По-поводу smallint - основная рабочая таблица предполагается ну очень большой (не менее миллиарда). В ней, фактически, только вторичные ключи собраны. Соответственно, хотелось бы по-возможности уменьшить тип. И если у меня неких типов событий всего 10 в справочной таблице (и вряд-ли вырастет больше 20), то обрезание этого типа даст хороший выигрыш.
Так что ограничение на constraint - это всё конечно хорошо. Но, чувствую, придётся как раз в сторону "char" смотреть... :(

Thamerlan
P.s.
Вы не родственник Winnipuh\'а?


Нет. Даже не однофамилец... :)
Тяжело резко перескакивать с MSSQL на Postgres... :)
...
Рейтинг: 0 / 0
А как в Postgres обстоит дело с типом byte?
    #35228393
Thamerlan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Боюсь вас огорчить, но физический размер char не 1 байт.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
x=> CREATE TABLE aaa (ch char( 1 ), bb boolean);
CREATE TABLE
x=> INSERT INTO aaa VALUES ('a', true);
INSERT  0   1 
x=> SELECT pg_column_size(ch), pg_column_size(bb) FROM aaa; 
 pg_column_size | pg_column_size 
----------------+----------------
               5  |               1 
( 1  row)

x=> 

Это на версии 8.2.
А вот 8.3 overheat поменьше:

Код: plaintext
1.
2.
3.
z=# SELECT pg_column_size(ch), pg_column_size(bb) FROM aaa;
 pg_column_size | pg_column_size
----------------+----------------
               2  |               1 
...
Рейтинг: 0 / 0
А как в Postgres обстоит дело с типом byte?
    #35228406
Ega
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ThamerlanБоюсь вас огорчить, но физический размер char не 1 байт.

Фигово.
Ладно, остановлюсь на smallint.
...
Рейтинг: 0 / 0
А как в Postgres обстоит дело с типом byte?
    #35228408
Ega
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя, вообще-то странно. Всё-таки один из стандартных типов...
...
Рейтинг: 0 / 0
А как в Postgres обстоит дело с типом byte?
    #35241401
Мужик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ThamerlanТипа byte нет. Минимальное целочисленное smallint.


Да ну?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE TABLE TEST (a "char");

INSERT INTO TEST (a) VALUES ('a');

SELECT pg_column_size(a) FROM TEST;

 pg_column_size    
 ----------------- 
  1                  
...
Рейтинг: 0 / 0
А как в Postgres обстоит дело с типом byte?
    #35261548
Thamerlan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже, что ваш "char" вовсе не char:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
mydb=# CREATE TABLE TEST (a "char");
CREATE TABLE
mydb=# INSERT INTO TEST (a) VALUES ('a');
INSERT  0   1 
mydb=# SELECT pg_column_size(a) FROM TEST;
 pg_column_size
----------------
               1 
( 1  row)

mydb=# CREATE TABLE TEST (a char);
CREATE TABLE
mydb=# INSERT INTO TEST (a) VALUES ('a');
INSERT  0   1 
mydb=# SELECT pg_column_size(a) FROM TEST;
 pg_column_size
----------------
               2 
( 1  row)


И вот еще интереснее:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
mydb=# CREATE TABLE TEST (a "char");
CREATE TABLE
mydb=# INSERT INTO TEST (a) VALUES ('aaaaaaaa');
INSERT  0   1 
mydb=# INSERT INTO TEST (a) VALUES ('aaaaaa  ');
INSERT  0   1 
mydb=# SELECT pg_column_size(a) FROM TEST;
 pg_column_size
----------------
               1 
               1 
( 2  rows)

mydb=# SELECT * FROM test ;
 a
---
 a
 a
( 2  rows)

mydb=# CREATE TABLE TEST (a char);
CREATE TABLE
mydb=# INSERT INTO TEST (a) VALUES ('aaaaaaaa');
ERROR:  value too long for type character( 1 )


Кто-то может прокомментировать?
...
Рейтинг: 0 / 0
А как в Postgres обстоит дело с типом byte?
    #35261732
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Thamerlan Кто-то может прокомментировать?
наоборот, "char" это "char" а char это char(1), т.е. bpchar
(результат эксперимента)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
--BEGIN;
CREATE TABLE TEST (a "char", b char, c char( 1 ));--, d "char"(1));

INSERT INTO TEST (a,b,c) VALUES ('aaaaaaaa','a','a');
INSERT INTO TEST (a,b,c) VALUES ('жb','ж','ж');
SELECT * FROM TEST;
-- в пгадмине показывает тип колонок как char, bpchar
--а скрипт создания как 
CREATE TABLE test
(
  a char,
  b char( 1 ),
  c char( 1 )
) 
по отличию одного от другого сведения отрывочны
авторE.64. Release 6.4
Make "char" type a synonym for "char(1)" (actually implemented as bpchar)(Thomas)
короче - бардак. Что в идеологии ("char"!=char), что в документации.
но вот в типах:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE TYPE "char"
   (INPUT=charin, OUTPUT=charout, DEFAULT='',
       INTERNALLENGTH= 1 , ALIGNMENT=char, STORAGE=PLAIN);
ALTER TYPE "char" OWNER TO pgsql;
COMMENT ON TYPE "char" IS 'single character';
---
CREATE TYPE bpchar
   (INPUT=bpcharin, OUTPUT=bpcharout, DEFAULT='',
       INTERNALLENGTH=- 1 , ALIGNMENT=int4, STORAGE=EXTENDED);
ALTER TYPE bpchar OWNER TO pgsql;
COMMENT ON TYPE bpchar IS 'char(length), blank-padded string, fixed storage length';
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / А как в Postgres обстоит дело с типом byte?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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