powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / баг с индексами при create temporary table t_tmp (like t_tmp including all);
8 сообщений из 8, страница 1 из 1
баг с индексами при create temporary table t_tmp (like t_tmp including all);
    #40070113
Misha111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
тест:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
create table t_tmp (a int);
create index on t_tmp (a);

create temporary table t_tmp (like t_tmp including all);
create temporary table t_tmp1 (like t_tmp including all);

select * 
from pg_catalog.pg_indexes 
where tablename  like 't_tmp%';

drop table t_tmp, t_tmp1;
drop table t_tmp;



в результате на временных таблицах индексы не создаются, хотя должны:
Код: plaintext
1.
2.
3.
 schemaname | tablename |  indexname  | tablespace |                        indexdef
------------+-----------+-------------+------------+---------------------------------------------------------
 test2      | t_tmp     | t_tmp_a_idx |            | CREATE INDEX t_tmp_a_idx ON test2.t_tmp USING btree (a)
(1 строка)

меняем порядок создания временных таблиц:
Код: sql
1.
2.
3.
4.
...
create temporary table t_tmp1 (like t_tmp including all);
create temporary table t_tmp (like t_tmp including all);
...



создается индекс только на одной временной таблице:
Код: plaintext
1.
2.
3.
4.
 schemaname | tablename |  indexname   | tablespace |                           indexdef
------------+-----------+--------------+------------+---------------------------------------------------------------
 test2      | t_tmp     | t_tmp_a_idx  |            | CREATE INDEX t_tmp_a_idx ON test2.t_tmp USING btree (a)
 pg_temp_6  | t_tmp1    | t_tmp1_a_idx |            | CREATE INDEX t_tmp1_a_idx ON pg_temp_6.t_tmp1 USING btree (a)
(2 строки)

долго бился головой об стену (даже сервер перезагрузил))), пока сам тест не подсказал решение - добавить имя схемы
create temporary table t_tmp (like test2.t_tmp including all);
create temporary table t_tmp1 (like test2.t_tmp including all);

результат ожидаемый:
Код: plaintext
1.
2.
3.
4.
5.
 schemaname | tablename |  indexname   | tablespace |                           indexdef
------------+-----------+--------------+------------+---------------------------------------------------------------
 test2      | t_tmp     | t_tmp_a_idx  |            | CREATE INDEX t_tmp_a_idx ON test2.t_tmp USING btree (a)
 pg_temp_6  | t_tmp     | t_tmp_a_idx  |            | CREATE INDEX t_tmp_a_idx ON pg_temp_6.t_tmp USING btree (a)
 pg_temp_6  | t_tmp1    | t_tmp1_a_idx |            | CREATE INDEX t_tmp1_a_idx ON pg_temp_6.t_tmp1 USING btree (a)
(3 строки)

гуру подскажите - это всеже баг?
...
Рейтинг: 0 / 0
баг с индексами при create temporary table t_tmp (like t_tmp including all);
    #40070116
Misha111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
поправочка - согласен что при создании второй временной таблицы имя схемы обязательно (согласно библии), но вторая таблица притянута искуствено в ходе тестов. почему при создании первой временной с тем-же именем что и постоянная обязательно указывать имя схемы?
...
Рейтинг: 0 / 0
баг с индексами при create temporary table t_tmp (like t_tmp including all);
    #40070123
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Misha111,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
melkij=> create table t_tmp (a int);
CREATE TABLE
melkij=> create index on t_tmp (a);
CREATE INDEX
melkij=> 
melkij=> create temporary table t_tmp (like t_tmp including all);
CREATE TABLE
melkij=> create temporary table t_tmp1 (like t_tmp including all);
CREATE TABLE
melkij=> 
melkij=> select * 
melkij-> from pg_catalog.pg_indexes 
melkij-> where tablename  like 't_tmp%';
 schemaname | tablename |  indexname   | tablespace |                           indexdef                            
------------+-----------+--------------+------------+---------------------------------------------------------------
 public     | t_tmp     | t_tmp_a_idx  |            | CREATE INDEX t_tmp_a_idx ON public.t_tmp USING btree (a)
 pg_temp_3  | t_tmp     | t_tmp_a_idx  |            | CREATE INDEX t_tmp_a_idx ON pg_temp_3.t_tmp USING btree (a)
 pg_temp_3  | t_tmp1    | t_tmp1_a_idx |            | CREATE INDEX t_tmp1_a_idx ON pg_temp_3.t_tmp1 USING btree (a)
всё как ожидается.
...
Рейтинг: 0 / 0
баг с индексами при create temporary table t_tmp (like t_tmp including all);
    #40070206
Misha111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Melkij,

а версия какая?

у меня 12.5 64х Debian баг есть:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
postgres=# select version();
                                                     version
------------------------------------------------------------------------------------------------------------------
 PostgreSQL 12.5 (Debian 12.5-1.pgdg100+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit
(1 строка)


postgres=# create table t_tmp (a int);
CREATE TABLE
postgres=# create index on t_tmp (a);
CREATE INDEX
postgres=#
postgres=# create temporary table t_tmp (like t_tmp including all);
CREATE TABLE
postgres=# create temporary table t_tmp1 (like t_tmp including all);
CREATE TABLE
postgres=#
postgres=# select *
postgres-# from pg_catalog.pg_indexes
postgres-# where tablename  like 't_tmp%';
 schemaname | tablename |  indexname  | tablespace |                         indexdef
------------+-----------+-------------+------------+----------------------------------------------------------
 public     | t_tmp     | t_tmp_a_idx |            | CREATE INDEX t_tmp_a_idx ON public.t_tmp USING btree (a)
(1 строка)

12.3 64х под виндой бага нет:

Код: 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.
25.
postgres=# select version();
                          version
------------------------------------------------------------
 PostgreSQL 12.3, compiled by Visual C++ build 1914, 64-bit
(1 строка)


postgres=# create table t_tmp (a int);
CREATE TABLE
postgres=# create index on t_tmp (a);
CREATE INDEX
postgres=#
postgres=# create temporary table t_tmp (like t_tmp including all);
CREATE TABLE
postgres=# create temporary table t_tmp1 (like t_tmp including all);
CREATE TABLE
postgres=#
postgres=# select *
postgres-# from pg_catalog.pg_indexes
postgres-# where tablename  like 't_tmp%';
 schemaname | tablename |  indexname   | tablespace |                           indexdef
------------+-----------+--------------+------------+---------------------------------------------------------------
 public     | t_tmp     | t_tmp_a_idx  |            | CREATE INDEX t_tmp_a_idx ON public.t_tmp USING btree (a)
 pg_temp_4  | t_tmp     | t_tmp_a_idx  |            | CREATE INDEX t_tmp_a_idx ON pg_temp_4.t_tmp USING btree (a)
 pg_temp_4  | t_tmp1    | t_tmp1_a_idx |            | CREATE INDEX t_tmp1_a_idx ON pg_temp_4.t_tmp1 USING btree (a)
(3 строки)

у кого есть 13 чекните плиз.
...
Рейтинг: 0 / 0
баг с индексами при create temporary table t_tmp (like t_tmp including all);
    #40070212
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Misha111,

на 13.3 проверял.
Собрал 12.5 - да, воспроизвелось. Репортите баг.
Как гипотеза - проблема из-за совпадения имени таблицы:
- create table регистрирует запись в системном каталоге
- затем следуя including all вычитывает связанные данные
- при этом по ошибке находим данные самого себя
...
Рейтинг: 0 / 0
баг с индексами при create temporary table t_tmp (like t_tmp including all);
    #40070216
Misha111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Melkij,

спасибо
...
Рейтинг: 0 / 0
баг с индексами при create temporary table t_tmp (like t_tmp including all);
    #40070319
Misha111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в версии 12.6 баг пофиксили.
обновился до 12.7

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
postgres=# select version();
                                                     version
------------------------------------------------------------------------------------------------------------------
 PostgreSQL 12.7 (Debian 12.7-1.pgdg100+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit
(1 строка)
postgres=# create table t_tmp (a int);
CREATE TABLE
postgres=# create index on t_tmp (a);
CREATE INDEX
postgres=#
postgres=# create temporary table t_tmp (like t_tmp including all);
CREATE TABLE
postgres=#
postgres=# select *
postgres-# from pg_catalog.pg_indexes
postgres-# where tablename  like 't_tmp%';
 schemaname | tablename |  indexname  | tablespace |                          indexdef
------------+-----------+-------------+------------+-------------------------------------------------------------
 public     | t_tmp     | t_tmp_a_idx |            | CREATE INDEX t_tmp_a_idx ON public.t_tmp USING btree (a)
 pg_temp_5  | t_tmp     | t_tmp_a_idx |            | CREATE INDEX t_tmp_a_idx ON pg_temp_5.t_tmp USING btree (a)
(2 строки)
...
Рейтинг: 0 / 0
баг с индексами при create temporary table t_tmp (like t_tmp including all);
    #40070366
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Misha111,

ага, видел в рассылке обсуждение. Проглядел в release notes упоминание, хоть специально туда и заглянул.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / баг с индексами при create temporary table t_tmp (like t_tmp including all);
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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