Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
06.10.2020, 22:58
|
|||
---|---|---|---|
CREATE TYPE: примеры из справки, которые не работают |
|||
#18+
https://www.postgresql.org/docs/13/sql-createtype.html The input_function converts the type's external textual representation to the internal representation used by the operators and functions defined for the type. output_function performs the reverse transformation. The input function can be declared as taking one argument of type cstring, or as taking three arguments of types cstring, oid, integer. The first argument is the input text as a C string https://www.postgresql.org/docs/13/sql-createtype.html This example creates the base data type box and then uses the type in a table definition: CREATE TYPE box; CREATE FUNCTION my_box_in_function(cstring) RETURNS box AS ... ; CREATE FUNCTION my_box_out_function(box) RETURNS cstring AS ... ; CREATE TYPE box ( INTERNALLENGTH = 16, INPUT = my_box_in_function, OUTPUT = my_box_out_function ); CREATE TABLE myboxes ( id integer, description box ); Проверяем работоспособность приведённого примера: Код: sql 1. 2. 3. 4. 5. 6.
Таким образом, имеем 2 противоречия справки фактическому поведению. И как так можно работать, когда ничего не работает ??? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.10.2020, 23:04
|
|||
---|---|---|---|
CREATE TYPE: примеры из справки, которые не работают |
|||
#18+
Код: sql 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.10.2020, 23:11
|
|||
---|---|---|---|
CREATE TYPE: примеры из справки, которые не работают |
|||
#18+
Код: sql 1. 2.
Т.е. PLPGSQL в отличие от SQL, может принимать cstring , но типы-пустышки по-прежнему возвращать не может. Вопросы : 1 ) Тогда как объявить функции INPUT и OUTPUT для нового типа ? 2 ) Как заставить SQL принимать строки cstring ? Т.к. SQL, судя по всему, работает быстрее PLPGSQL ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.10.2020, 23:19
|
|||
---|---|---|---|
CREATE TYPE: примеры из справки, которые не работают |
|||
#18+
Код: sql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.10.2020, 23:35
|
|||
---|---|---|---|
CREATE TYPE: примеры из справки, которые не работают |
|||
#18+
" Тип-пустышку " функция возвращать не может. Значит, нужно каким-то волшебным способом создать " тип в виде оболочки ". К сожалению, ни в справке, ни в интернете нет информации о том, какую форму должна иметь эта оболочка - форму домика с крышей, форму пузырька или форму плюшки. LANGUAGE SQL наверняка скушал бы " тип в форме плюшки ", но он не принимает строки cstring . LANGUAGE PLPGSQL не сможет обеспечить сохранность " типа в форме пузырька ", т.к. принимает строки cstring . Остаётся только домик с крышей . Но построить такую сложную конструкцию на SQL ещё никому не удавалось... ... |
|||
:
Нравится:
Не нравится:
|
|||
|
07.10.2020, 11:00
|
|||
---|---|---|---|
|
|||
CREATE TYPE: примеры из справки, которые не работают |
|||
#18+
Cyrax_02, Текст ошибки "SQL-функции не могут иметь аргументы типа cstring" говорит о том, что такую функцию нельзя писать на SQL. На той же странице документации можно найти и как нужно: "a shell type will only be made this way when the input function is written in C". Создание по-настоящему нового типа, с описанием входных/выходных функций это весьма не тривиальная задача. Такое стоит делать только на C. А в большинстве случаев достаточно уже имеющихся встроенных типов. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
07.10.2020, 13:11
|
|||
---|---|---|---|
CREATE TYPE: примеры из справки, которые не работают |
|||
#18+
Павел ЛузановТекст ошибки "SQL-функции не могут иметь аргументы типа cstring" говорит о том, что такую функцию нельзя писать на SQL.И на PGPLSQL тоже: " функции PL/pgSQL не могут возвращать тип ... ". авторBefore PostgreSQL version 8.2, the shell-type creation syntax CREATE TYPE name did not exist... Also, to avoid accidentally cluttering the catalogs with shell types as a result of simple typos in function definitions, a shell type will only be made this way when the input function is written in C.Значит, при выполнении " CREATE TYPE name; " создаётся всего-лишь тип-пустышка (empty type) , который нельзя использовать при определении функций с реализацией на SQL или PGPLSQL . И только при определении функций с реализацией на уровне C такой тип интерпретируется как тип в виде оболочки (shell-type) . До версии 8.2 такой тип всегда интерпретировался как " shell-type ". Предложение " Before PostgreSQL version 8.2, the shell-type creation syntax CREATE TYPE name did not exist " в справке частично противоречит фактическому поведению, поскольку " CREATE TYPE name; " - это синтаксис "shell-type" только в определённой локальной ситуации, а в общем понимании (применительно ко всем случаям) - это синтаксис создания empty type . авторСоздание по-настоящему нового типа, с описанием входных/выходных функций это весьма не тривиальная задача. Такое стоит делать только на C.Так в текущих версиях PostgreSQL сделать это не на C стало уже невозможно... авторА в большинстве случаев достаточно уже имеющихся встроенных типов. Странно, что такая гибкая и функциональная СУБД (PostgreSQL) из коробки не имеет беззнаковых целочисленных типов и 4-байтового unix timestamp (всё это есть в MySQL). ... |
|||
:
Нравится:
Не нравится:
|
|||
|
07.10.2020, 13:20
|
|||
---|---|---|---|
|
|||
CREATE TYPE: примеры из справки, которые не работают |
|||
#18+
Cyrax_02 Странно, что такая гибкая и функциональная СУБД (PostgreSQL) из коробки не имеет беззнаковых целочисленных типов и 4-байтового unix timestamp (всё это есть в MySQL). ANSI SQL стандарт не предусматривает беззнаковых целых smallint/int/bigint равно как и 4х байтового unix timestamp. http://jakewheat.github.io/sql-overview/sql-2011-foundation-grammar.html#predefined-type -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
|
07.10.2020, 13:52
|
|||
---|---|---|---|
CREATE TYPE: примеры из справки, которые не работают |
|||
#18+
Cyrax_02 авторА в большинстве случаев достаточно уже имеющихся встроенных типов. А вот тут как раз именно потому что гибкая. Peter Eisentraut, core teamSupport for unsigned integer types and smaller integer types has been one of the more common outstanding feature request for PostgreSQL. Inclusion of additional integer types into the core is typically rejected with the argument that it would make the type system too complicated and fragile. The experience from writing this module suggests: That is not wrong. Another argument, either explicit or implicit, is that it is a lot of work. Again: true. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
07.10.2020, 14:04
|
|||
---|---|---|---|
CREATE TYPE: примеры из справки, которые не работают |
|||
#18+
MelkijА вот тут как раз именно потому что гибкая.Я знаю про это расширение. Поэтому, и написал "из коробки". Любое стороннее расширение (пусть даже и за авторством одного из разработчиков PostgreSQL), может не завестись на очередном выпуске новой версии PostgreSQL. А если на базе этих типов построены другие функции и типы, то вся база капитально "ляжет". P.S . Не понятно, сколько ещё будет упираться команда PostgreSQL от включения этих типов в базовую сборку. Дополнительно ещё и utimestamp / utimestamptz нужно добавить. Незачем расходовать больше памяти, чем для этого требуется (речь о распухании БД и индексов от 8-байтовых полей). ... |
|||
:
Нравится:
Не нравится:
|
|||
|
07.10.2020, 14:32
|
|||
---|---|---|---|
CREATE TYPE: примеры из справки, которые не работают |
|||
#18+
Cyrax_02, блин. Да прочитайте объяснение Peter'а, а не посмотрите только на ссылку. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
07.10.2020, 14:52
|
|||
---|---|---|---|
CREATE TYPE: примеры из справки, которые не работают |
|||
#18+
Melkij блин. Да прочитайте объяснение Peter'а, а не посмотрите только на ссылку. Читал я это объяснение: 1 ) Аргументы "против" там приводятся в отношении расширения, а не нативной реализации. 2 ) Что касается нативной реализации, то " This module solves that problem by generating most of the code automatically " - применимо как в отношении расширения, так и в отношении нативной реализации. Таким образом, доводы против нативной реализации в этих объяснениях отсутствуют. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
07.10.2020, 19:13
|
|||
---|---|---|---|
CREATE TYPE: примеры из справки, которые не работают |
|||
#18+
Cyrax_02, Это не просто разработчик PostgreSQL, и даже не просто commiter. Это член Core Team проекта, поэтому > Аргументы "против" там приводятся в отношении расширения, а не нативной реализации. Ему всё равно, кодить расширение или базу. Из его уст эти аргументы 100% ложатся на PostgreSQL в плане нативной реализации. И это… PostgreSQL это open source. Хотите фичу (тем более что есть код уже) — пришлите патч, делов-то! ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=53&tablet=1&tid=1994435]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
163ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 302ms |
total: | 557ms |
0 / 0 |