Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Вопрос новичка в PG / 16 сообщений из 16, страница 1 из 1
02.02.2022, 02:39
    #40131137
most23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос новичка в PG
Есть функция f_test которая определена как RETURNS text.
Пишется скрипт, который должен вызвать эту функцию и сохранить результат в локальной переменной l_ret.
Объясните пожалуйста есть ли разница, как писать в скрипте:

Код: plsql
1.
SELECT f_test() INTO l_ret;

или
Код: plsql
1.
l_ret:=f_test();
...
Рейтинг: 0 / 0
02.02.2022, 13:37
    #40131235
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос новичка в PG
most23
Есть функция f_test которая определена как RETURNS text.
Пишется скрипт, который должен вызвать эту функцию и сохранить результат в локальной переменной l_ret.
Объясните пожалуйста есть ли разница, как писать в скрипте:

Код: plsql
1.
SELECT f_test() INTO l_ret;

или
Код: plsql
1.
l_ret:=f_test();



Никакой... чистая вкусовщина.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
02.02.2022, 17:15
    #40131290
delphinotes
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос новичка в PG
Если внутри f_test будет exception, то, собирая стек вызовов, второй вариант будет более компактным:

Код: sql
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.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
create function test.f_test() returns text language plpgsql as $$
begin
  raise exception 'Error test';
end
$$

create function test.f1() returns text language plpgsql as $$
declare
  l_result text;
  l_context text;
begin
  select test.f_test() into l_result;
  return l_result;
exception
  when others then
    GET STACKED DIAGNOSTICS
      l_context := pg_exception_context
    ;
    return l_context;
end
$$

create function test.f2() returns text language plpgsql as $$
declare
  l_result text;
  l_context text;
begin
  l_result := test.f_test();
  return l_result;
exception
  when others then
    GET STACKED DIAGNOSTICS
      l_context := pg_exception_context
    ;
    return l_context;
end
$$



Код: sql
1.
2.
3.
4.
select test.f1();
PL/pgSQL function test.f_test() line 3 at RAISE
SQL statement "select test.f_test()"
PL/pgSQL function test.f1() line 6 at SQL statement



Код: sql
1.
2.
3.
select test.f2();
PL/pgSQL function test.f_test() line 3 at RAISE
PL/pgSQL function test.f2() line 6 at assignment



Могу предположить, что и выполняться он будет чуть быстрее (как минимум текста для парсинга меньше). Ну и читается нагляднее.
...
Рейтинг: 0 / 0
02.02.2022, 19:31
    #40131313
Вопрос новичка в PG
а как в постгре ф-и разложить по группам?
чтобы не в одной куче все, а по схемам, например
...
Рейтинг: 0 / 0
02.02.2022, 20:11
    #40131324
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос новичка в PG
бабушкин зайчик
а как в постгре ф-и разложить по группам?
чтобы не в одной куче все, а по схемам, например


ну вот по схемам например и разложить.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
02.02.2022, 23:30
    #40131382
most23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос новичка в PG
Maxim Boguk,
я после Oracle как-то не вкуриваю, а что вообще такое 'схема' в PG?
В Oracle это совокупность объектов принадлежащих юзеру, по умолчанию он может их для себя создавать и имеет к ним доступ и может давать доступы другим юзерам.
А PG мне кажется это что-то несколько другое?
...
Рейтинг: 0 / 0
03.02.2022, 13:52
    #40131478
Павел Лузанов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос новичка в PG
most23,

В oracle пользователь может создавать объекты ровно в одной схеме, имя которой совпадает с именем пользователя.
А в постгресе можно создавать сколько угодно схем и раскладывать по ним объекты. Хорошая аналогия: схемы это каталоги в файловой системе, а объекты это файлы. Ну только каталоги не могут быть вложенными (нельзя создать схему внутри другой схемы).
...
Рейтинг: 0 / 0
03.02.2022, 14:27
    #40131490
mefman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос новичка в PG
most23
Maxim Boguk,
я после Oracle как-то не вкуриваю, а что вообще такое 'схема' в PG?
В Oracle это совокупность объектов принадлежащих юзеру, по умолчанию он может их для себя создавать и имеет к ним доступ и может давать доступы другим юзерам.
А PG мне кажется это что-то несколько другое?

в PG эта тема аналогична MSSQL. пользователь != схема.
...
Рейтинг: 0 / 0
03.02.2022, 14:46
    #40131493
Alexander A. Sak
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос новичка в PG
Павел Лузанов
most23,

В oracle пользователь может создавать объекты ровно в одной схеме, имя которой совпадает с именем пользователя.
...


Нет. В Оракле точно такой же синтаксис: create SCHEMA.TABLE (...);
...
Рейтинг: 0 / 0
03.02.2022, 19:42
    #40131545
most23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос новичка в PG
Павел Лузанов
most23,

В oracle пользователь может создавать объекты ровно в одной схеме, имя которой совпадает с именем пользователя.
А в постгресе можно создавать сколько угодно схем и раскладывать по ним объекты. Хорошая аналогия: схемы это каталоги в файловой системе, а объекты это файлы. Ну только каталоги не могут быть вложенными (нельзя создать схему внутри другой схемы).

Если схема в PG это аналог каталога...какая-то не вполне аналогия наверное, ведь схема всё же связана с именем пользователя...или нет?
...
Рейтинг: 0 / 0
03.02.2022, 20:04
    #40131552
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос новичка в PG
most23
Павел Лузанов
most23,

В oracle пользователь может создавать объекты ровно в одной схеме, имя которой совпадает с именем пользователя.
А в постгресе можно создавать сколько угодно схем и раскладывать по ним объекты. Хорошая аналогия: схемы это каталоги в файловой системе, а объекты это файлы. Ну только каталоги не могут быть вложенными (нельзя создать схему внутри другой схемы).

Если схема в PG это аналог каталога...какая-то не вполне аналогия наверное, ведь схема всё же связана с именем пользователя...или нет?


схема в PG НИКАК с именем пользователя не связана ВООБЩЕ.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
03.02.2022, 20:53
    #40131560
Павел Лузанов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос новичка в PG
Alexander A. Sak
Павел Лузанов
most23,

В oracle пользователь может создавать объекты ровно в одной схеме, имя которой совпадает с именем пользователя.
...


Нет. В Оракле точно такой же синтаксис: create SCHEMA.TABLE (...);

Александр, а кому будет принадлежать таблица, кто будет владельцем? Если правильно помню (хотя похоже всё забыл), то пользователю с именем SCHEMA.

В postgres в одной схеме запросто могут находиться объекты разных пользователей.

А вообще использование схем это стандарт SQL. postgres и oracle его поддерживают. Просто oracle поддерживает немного в урезанном виде.
...
Рейтинг: 0 / 0
03.02.2022, 21:42
    #40131569
Alexander A. Sak
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос новичка в PG
Павел Лузанов
Alexander A. Sak
пропущено...


Нет. В Оракле точно такой же синтаксис: create SCHEMA.TABLE (...);

Александр, а кому будет принадлежать таблица, кто будет владельцем? Если правильно помню (хотя похоже всё забыл), то пользователю с именем SCHEMA.


Да, таблица будет принадлежать пользователю SCHEMA, а не тому, кто создает эту таблицу.
Я уточнял насчет " пользователь может создавать объекты ровно в одной схеме, имя которой совпадает с именем пользователя ". Создавать же можно в чужой схеме.
...
Рейтинг: 0 / 0
04.02.2022, 09:09
    #40131617
kliff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос новичка в PG
в ПГ по умолчанию владельцем будет создающий, если не указано иное в скрипте создания таблицы ALTER TABLE OWNER TO
...
Рейтинг: 0 / 0
04.02.2022, 09:24
    #40131618
Павел Лузанов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос новичка в PG
Alexander A. Sak

Я уточнял насчет " пользователь может создавать объекты ровно в одной схеме, имя которой совпадает с именем пользователя ". Создавать же можно в чужой схеме.

Спасибо за уточнение, не точно выразился.
...
Рейтинг: 0 / 0
04.02.2022, 14:49
    #40131694
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос новичка в PG
Павел Лузанов
А вообще использование схем это стандарт SQL. postgres и oracle его поддерживают.

И согласно именно этому стандарту у таблицы нет владельца. Владелец есть у схемы, в которой находится эта таблица и его имя не обязано совпадать с именем схемы.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Вопрос новичка в PG / 16 сообщений из 16, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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