powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / ...и снова MSSQL 2008 R2 vs PostgreSQL
25 сообщений из 92, страница 3 из 4
...и снова MSSQL 2008 R2 vs PostgreSQL
    #38027109
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreemanZAVА как, например, многократно использовать какую-нибудь тяжёлую выборку,
если в PG подзапросы не материализуются?
Временные таблицы для этого есть.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
...и снова MSSQL 2008 R2 vs PostgreSQL
    #38027151
FreemanZAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovFreemanZAVА как, например, многократно использовать какую-нибудь тяжёлую выборку,
если в PG подзапросы не материализуются?
Временные таблицы для этого есть.


Собственно тынца я и просил всю дорогу. А мне говорили про какие-то view. Я просто подзабыл, что механизм временных таблиц в PG не такой, как в oracle, например. В PG есть LOCAL TEMP TABLE ON COMMIT DROP, что вполне может заменить табличные переменные
...
Рейтинг: 0 / 0
...и снова MSSQL 2008 R2 vs PostgreSQL
    #38027186
FreemanZAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreemanZAVDimitry Sibiryakovпропущено...

Временные таблицы для этого есть.


Собственно тынца я и просил всю дорогу. А мне говорили про какие-то view. Я просто подзабыл, что механизм временных таблиц в PG не такой, как в oracle, например. В PG есть LOCAL TEMP TABLE ON COMMIT DROP, что вполне может заменить табличные переменные

Хотя не уверен
...
Рейтинг: 0 / 0
...и снова MSSQL 2008 R2 vs PostgreSQL
    #38027189
Зайцев Фёдор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreemanZAVВ PG есть LOCAL TEMP TABLE ON COMMIT DROP, что вполне может заменить табличные переменные
и в качестве параметра функции можно передать?
...
Рейтинг: 0 / 0
...и снова MSSQL 2008 R2 vs PostgreSQL
    #38027198
FreemanZAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зайцев ФёдорFreemanZAVВ PG есть LOCAL TEMP TABLE ON COMMIT DROP, что вполне может заменить табличные переменные
и в качестве параметра функции можно передать?

Нет необходимости. Таблица будет видна всем вызываемым функциям (хотя не очень кошерно). Но, в отличие от табличных переменных, таблица не будет Readonly.
...
Рейтинг: 0 / 0
...и снова MSSQL 2008 R2 vs PostgreSQL
    #38027290
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreemanZAVТаблица будет видна всем вызываемым функциям (хотя не очень кошерно).

Функция, обрабатывающая заранее неизвестную таблицу, некошерна сама по себе.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
...и снова MSSQL 2008 R2 vs PostgreSQL
    #38027522
FreemanZAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovFreemanZAVТаблица будет видна всем вызываемым функциям (хотя не очень кошерно).

Функция, обрабатывающая заранее неизвестную таблицу, некошерна сама по себе.

Нет в жизни совершенства. В PG нет табличных переменных, в MSSQL они есть, но передать их по человечески в другую функцию нельзя.

А касаемо вопроса про табличные переменные в MSSQL:
mad_nazgul Зачем?! Если есть таблицы?


Тот же вопрос можно задать про массивы в PG.
...
Рейтинг: 0 / 0
...и снова MSSQL 2008 R2 vs PostgreSQL
    #38027567
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreemanZAVА как, например, многократно использовать какую-нибудь тяжёлую выборку, если в PG подзапросы не материализуются?
Зависит от плана, может и материализовать :)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
explain with b as (select * from b) select count(1) from a join b using(n);
                              QUERY PLAN                               
-----------------------------------------------------------------------
 Aggregate  (cost=360685.00..360685.01 rows=1 width=0)
   CTE b
     ->  Seq Scan on b  (cost=0.00..145.00 rows=10000 width=4)
   ->  Nested Loop  (cost=0.00..360240.00 rows=120000 width=0)
         Join Filter: (a.n = b.n)
         ->  CTE Scan on b  (cost=0.00..200.00 rows=10000 width=4)
         ->  Materialize  (cost=0.00..46.00 rows=2400 width=4)
               ->  Seq Scan on a  (cost=0.00..34.00 rows=2400 width=4)
...
Рейтинг: 0 / 0
...и снова MSSQL 2008 R2 vs PostgreSQL
    #38027633
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЁшFreemanZAVА как, например, многократно использовать какую-нибудь тяжёлую выборку, если в PG подзапросы не материализуются?
Зависит от плана, может и материализовать :)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
explain with b as (select * from b) select count(1) from a join b using(n);
                              QUERY PLAN                               
-----------------------------------------------------------------------
 Aggregate  (cost=360685.00..360685.01 rows=1 width=0)
   CTE b
     ->  Seq Scan on b  (cost=0.00..145.00 rows=10000 width=4)
   ->  Nested Loop  (cost=0.00..360240.00 rows=120000 width=0)
         Join Filter: (a.n = b.n)
         ->  CTE Scan on b  (cost=0.00..200.00 rows=10000 width=4)
         ->  Materialize  (cost=0.00..46.00 rows=2400 width=4)
               ->  Seq Scan on a  (cost=0.00..34.00 rows=2400 width=4)

а если он еще сотни строчек занимает? А если он результат нескольких запросов?
...
Рейтинг: 0 / 0
...и снова MSSQL 2008 R2 vs PostgreSQL
    #38027823
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зайцев Фёдорвы что-то путаете - нужны таблицы, которые ведут себя как переменные.
у вас такие есть?

Зачем?!
Когда есть
1) Таблицы
2) Функции
...
Рейтинг: 0 / 0
...и снова MSSQL 2008 R2 vs PostgreSQL
    #38027827
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreemanZAVА как, например, многократно использовать какую-нибудь тяжёлую выборку, если в PG подзапросы не материализуются?

Э-э-э.... А в чем проблема использовать тяжелую выборку?
Как минимум план запроса строиться и последующие запросы к такой выборке будут быстрее.
Т.е. ощущение, что табличные переменные - "костыль" меня не покидают. :-)
...
Рейтинг: 0 / 0
...и снова MSSQL 2008 R2 vs PostgreSQL
    #38027831
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зайцев ФёдорFreemanZAVВ PG есть LOCAL TEMP TABLE ON COMMIT DROP, что вполне может заменить табличные переменные
и в качестве параметра функции можно передать?

Можно... вот только как массив. ;-)
...
Рейтинг: 0 / 0
...и снова MSSQL 2008 R2 vs PostgreSQL
    #38027832
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovFreemanZAVТаблица будет видна всем вызываемым функциям (хотя не очень кошерно).

Функция, обрабатывающая заранее неизвестную таблицу, некошерна сама по себе.


Наследование ;-)
Т.е. можно обрабатывать только то что известно.
...
Рейтинг: 0 / 0
...и снова MSSQL 2008 R2 vs PostgreSQL
    #38027902
FreemanZAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul

Э-э-э.... А в чем проблема использовать тяжелую выборку?


Чтобы понять, в чём проблема тяжёлых выборок, можно например почитать про хинт materialize в oracle - что он делает и для чего он нужен.

mad_nazgulТ.е. ощущение, что табличные переменные - "костыль" меня не покидают. :-)
В сущности как и массивы
...
Рейтинг: 0 / 0
...и снова MSSQL 2008 R2 vs PostgreSQL
    #38027914
FreemanZAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgulЗайцев Фёдорвы что-то путаете - нужны таблицы, которые ведут себя как переменные.
у вас такие есть?

Зачем?!
Когда есть
1) Таблицы
2) Функции

Ещё раз могу объяснить. Табличные переменные по сути являются временными таблицами, только их можно объявлять внутри процедур как переменные и передавать из процедуры в процедуру. Зачем нужны временные таблицы объяснять надо?
...
Рейтинг: 0 / 0
...и снова MSSQL 2008 R2 vs PostgreSQL
    #38027945
FreemanZAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЁшFreemanZAVА как, например, многократно использовать какую-нибудь тяжёлую выборку, если в PG подзапросы не материализуются?
Зависит от плана, может и материализовать :)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
explain with b as (select * from b) select count(1) from a join b using(n);
                              QUERY PLAN                               
-----------------------------------------------------------------------
 Aggregate  (cost=360685.00..360685.01 rows=1 width=0)
   CTE b
     ->  Seq Scan on b  (cost=0.00..145.00 rows=10000 width=4)
   ->  Nested Loop  (cost=0.00..360240.00 rows=120000 width=0)
         Join Filter: (a.n = b.n)
         ->  CTE Scan on b  (cost=0.00..200.00 rows=10000 width=4)
         ->  Materialize  (cost=0.00..46.00 rows=2400 width=4)
               ->  Seq Scan on a  (cost=0.00..34.00 rows=2400 width=4)



Да, ошибался. Умеет.
...
Рейтинг: 0 / 0
...и снова MSSQL 2008 R2 vs PostgreSQL
    #38027963
FreemanZAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreemanZAVЁшпропущено...

Зависит от плана, может и материализовать :)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
explain with b as (select * from b) select count(1) from a join b using(n);
                              QUERY PLAN                               
-----------------------------------------------------------------------
 Aggregate  (cost=360685.00..360685.01 rows=1 width=0)
   CTE b
     ->  Seq Scan on b  (cost=0.00..145.00 rows=10000 width=4)
   ->  Nested Loop  (cost=0.00..360240.00 rows=120000 width=0)
         Join Filter: (a.n = b.n)
         ->  CTE Scan on b  (cost=0.00..200.00 rows=10000 width=4)
         ->  Materialize  (cost=0.00..46.00 rows=2400 width=4)
               ->  Seq Scan on a  (cost=0.00..34.00 rows=2400 width=4)



Да, ошибался. Умеет.

Хотя процесс не управляемый.
...
Рейтинг: 0 / 0
...и снова MSSQL 2008 R2 vs PostgreSQL
    #38028261
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreemanZAVЕщё раз могу объяснить. Табличные переменные по сути являются временными таблицами, только их можно объявлять внутри процедур как переменные и передавать из процедуры в процедуру. Зачем нужны временные таблицы объяснять надо?
Чем массивы плохи? Создавай какие хочешь типы записей и перегоняй массивами как и куда хочешь.
Код: sql
1.
2.
3.
4.
5.
6.
WITH tst AS
(
	SELECT array_agg(t.*) AS test
	FROM public.tbl1 t
)
SELECT ((unnest(tst.test))::public.tbl1).*  FROM tst


Свёртка и развёртка таблицы из массива
...
Рейтинг: 0 / 0
...и снова MSSQL 2008 R2 vs PostgreSQL
    #38028276
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вместо массива типов записей конкретной таблицы можно подставить любую запись, которая описана как составной тип.
Не хочется объявлять типы - можно создать двумерные массивы текста и, передавая в/из процедуру, преобразовывать во что
хочешь. Это несколько громоздко, но тоже правомерно.
...
Рейтинг: 0 / 0
...и снова MSSQL 2008 R2 vs PostgreSQL
    #38028330
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОКТОГЕНВместо массива типов записей конкретной таблицы можно подставить любую запись, которая описана как составной тип.
Не хочется объявлять типы создавать таблицы - можно создать двумерные массивы текста и, передавая в/из процедуру, преобразовывать во что
хочешь. Это несколько громоздко, но тоже правомерно.
FIXED
...
Рейтинг: 0 / 0
...и снова MSSQL 2008 R2 vs PostgreSQL
    #38028404
FreemanZAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОКТОГЕН
Чем массивы плохи? Создавай какие хочешь типы записей и перегоняй массивами как и куда хочешь.


Не поддерживают DML, например.
...
Рейтинг: 0 / 0
...и снова MSSQL 2008 R2 vs PostgreSQL
    #38028406
FreemanZAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreemanZAVОКТОГЕН
Чем массивы плохи? Создавай какие хочешь типы записей и перегоняй массивами как и куда хочешь.


Не поддерживают DML, например.

Я уже вроде говорил.
...
Рейтинг: 0 / 0
...и снова MSSQL 2008 R2 vs PostgreSQL
    #38029772
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreemanZAVmad_nazgulТ.е. ощущение, что табличные переменные - "костыль" меня не покидают. :-)
В сущности как и массивы

Ну массивы идут от концепции ООБД.
PostgreSQL как бы ООБД (хотя и не совсем)
Соответственно в нем можно реализовать любой тип, в том числе и массив

Так что это не костыль, а вполне концептуальное решение.
Вопрос только в другом, на сколько концепция ООБД соотноситься с СУРБД.
Думаю это уже философский вопрос.
...
Рейтинг: 0 / 0
...и снова MSSQL 2008 R2 vs PostgreSQL
    #38029850
FreemanZAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgulFreemanZAVпропущено...

В сущности как и массивы

Ну массивы идут от концепции ООБД.
PostgreSQL как бы ООБД (хотя и не совсем)
Соответственно в нем можно реализовать любой тип, в том числе и массив

Так что это не костыль, а вполне концептуальное решение.
Вопрос только в другом, на сколько концепция ООБД соотноситься с СУРБД.
Думаю это уже философский вопрос.

Ну тогда костылём можно считать всю концепцию ООБД.
...
Рейтинг: 0 / 0
...и снова MSSQL 2008 R2 vs PostgreSQL
    #38029995
какбе
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FreemanZAVFreemanZAVпропущено...


Да, ошибался. Умеет.

Хотя процесс не управляемый .какбе CTE до последнего всегда именно и только материализовывался. будет ли это изменено - не уверен.

т.е. если хотите материализовать - делаете через CTE (WITH) если на усмотрение оптимайзера - то через подзапрос "в старом стиле". т.е. жесткая "управляемая" материализация через CTE существует.
...
Рейтинг: 0 / 0
25 сообщений из 92, страница 3 из 4
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / ...и снова MSSQL 2008 R2 vs PostgreSQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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