SQLсервер в Linux -самостоятельное освоение пакета

топливный бак для лодочного мотора спб

Нетривиальные возможности


Нетривиальные возможности
Нетривиальные возможности В данной главе рассматриваются нетривиальные возможности PostgreSQL, в том числе оптимизация доступа к таблицам с использованием индексов, наследование и устан...
Индексы
Индексы Индексом называется объект базы данных, позволяющий значительно повысить скорость обращения к базе за счет ускоренной обработки команд, содержащих сравнительные критерии. Храним...
Создание индекса
Создание индекса Индексы создаются командой SQL CREATE INDEX. Синтаксис команды: CREATE [ UNIQUE ] INDEX индекс ON таблица [ USING тип ] ( поле [ класс ] [. ...] ) Здесь индекс — имя...
Листинг 7 1 Построение индекса
Листинг 7.1. Построение индекса booktown=# CREATE INDEX books_title_idx booktown-# ON books (title); CREATE booktown=# \d books Table "books" Attribute | Type | Modifier...
Листинг 7 2 Автоматическое построение индекса
Листинг 7.2. Автоматическое построение индекса booktown=# CREATE TABLE authors (id integer PRIMARY KEY, booktown(# last_name text, booktown(# first_name text); NOTICE: CREATE TA...
Уникальные индексы
Уникальные индексы Создание индекса с ключевым словом UNIQUE говорит о том, что индекс является уникальным, то есть индексируемое поле (или поля) не может содержать повторяющихся значе...
Листинг 7 3 Создание уникального индекса
Листинг 7.3. Создание уникального индекса booktown-* CREATE UNIQUE INDEX unique_publisherjdx booktown-# ON publishers (name): CREATE booktown=# \d publishers Table "publish...
Типы индексов
Типы индексов Необязательная секция USING задает реализуемый тип индекса. В PostgreSQL 7.1.x поддерживаются три типа индексов: В-дерево; R-дерево; кэш. В первом вариан...
Листинг 7 4 Выбор типа индекса
Листинг 7.4. Выбор типа индекса booktown=# CREATE TABLE polygons (shape polygon): CREATE booktown=f CREATE INDEX spadaljdx ON polygons USING RTREE (shape); CREATE ВНИМАНИЕ Ес...
Функциональные индексы
Функциональные индексы В слегка измененном виде команда CREATE INDEX позволяет индексировать данные не по значениям поля, а по некоторой функции этих значений. Такая форма индекса назы...
Листинг 7 5 Построение функционального индекса
Листинг 7.5. Построение функционального индекса booktown=# CREATE INDEX upperjtitlejdx ON books booktown-f (upper(title)); CREATE booktown=# SELECT title FROM books WHERE upper(tit...
Удаление индекса
Удаление индекса Для удаления индексов из таблицы используется команда DROP INDEX. Синтаксис команды DROP INDEX: DROP INDEX индекс [. ...] В качестве параметра команде передается имя уд...
Листинг 7 6 Удаление индекса
Листинг 7.6. Удаление индекса booktown=# DROP INDEX upper_title_idx: DROP...
Нетривиальное использование таблиц
Нетривиальное использование таблиц В PostgreSQL предусмотрено несколько вариантов ограничения данных, участвующих в операциях вставки и обновления. Один из них заключается в установке о...
Ограничения в таблицах
Ограничения в таблицах Ограничение (constraint) представляет собой особый атрибут таблицы, который устанавливает критерии допустимости для содержимого ее полей. Соблюдение этих правил...
Ограничения полей
Ограничения полей При выполнении команды \h CREATE TABLE клиент psql выводит несколько подробных синтаксических диаграмм для ограничений, которые могут устанавливаться для таблиц. Синт...
Листинг 7 7 Создание таблицы с ограничениями полей
Листинг 7.7. Создание таблицы с ограничениями полей booktown=# CREATE TABLE employees booktown-f (id integer PRIMARY KEY CHECK (id > 100). booktown(# lastjiame text NOT NULL....
Ограничения таблиц
Ограничения таблиц В ограничениях таблиц, в отличие от ограничений полей, могут участвовать сразу несколько полей таблицы. Синтаксис ограничения таблицы: [ CONSTRAINT ограничение ] { UN...
Листинг 7 8 Использование ограничений таблицы
Листинг 7.8. Использование ограничений таблицы booktown=# CREATE TABLE editions booktown-# (isbn text, booktown(# bookjid integer, booktown(# edition integer, booktown(# publish...
Добавление ограничений в существующую таблицу
Добавление ограничений в существующую таблицу Команда ALTER TABLE позволяет включать ограничения в существующую таблицу. Впрочем, в PostgreSQL 7.1.x поддерживается только возможность добав...
Листинг 7 9 Добавление ограничений в существующую таблицу
Листинг 7.9. Добавление ограничений в существующую таблицу booktown=# ALTER TABLE books booktown-# ADD CONSTRAINT legal_subjects booktown-# FOREIGN KEY (subjectjd) booktown-# REFER...
Удаление ограничений
Удаление ограничений В PostgreSQL 7.1.x не поддерживается прямое удаление ограничений из таблицы. Добиться нужного результата можно лишь одним способом — создать копию таблицы, практич...
Листинг 7 10 Удаление ограничений
Листинг 7.10. Удаление ограничений booktown=*# DROP INDEX books_id_pkey; DROP booktown=# CREATE TABLE new_books booktown-# (id integer CONSTRAINT books_id_pkey PRIMARY KEY. book...
Наследование
Наследование В PostgreSQL поддерживается механизм создания объектно-реляционных связей, называемый наследованием. Таблица может наследовать некоторые атрибуты своих полей от одной или...
Создание производной таблицы
Создание производной таблицы Производная таблица создается командой SQL CREATE TABLE, в которую включается секция INHERITS. Секция состоит из ключевого слова INHERITS и имени базовой т...
Листинг 7 11 Создание производной таблицы
Листинг 7.11. Создание производной таблицы booktown=# CREATE TABLE distinguished_authors (award text) booktown-# INHERITS (authors): CREATE booktown=# \d distinguished_authors Tabl...
Использование производных таблиц
Использование производных таблиц Связь общих полей базовой и производной таблиц не ограничивается чисто косметическими удобствами. Данные, занесенные в таблицу distinguished_authors, п...
Листинг 7 13 Выборка с наследованием
Листинг 7.13. Выборка с наследованием booktown=# SELECT * FROM distinguished_authors booktown-# WHERE lastjiame - 'Simon'; id | last_name firstjname award 25043 | Simon | Neil | Pulitz...
Модификация производных таблиц
Модификация производных таблиц Как упоминалось в предыдущем разделе, процесс включения данных в базовые и производные таблицы весьма прямолинеен. Вставка в производную таблицу приводит...
Листинг 7 14 Модификация базовых и производных таблиц
Листинг 7.14. Модификация базовых и производных таблиц booktown=# UPDATE authors SET firstjiame - 'Paul' booktown-# WHERE last_name = 'Simon'; UPDATE 1 booktown=# SELECT * FROM dis...
Листинг 7 15 Модификация базовых
Листинг 7.15. Модификация базовых таблиц с ключевым словом ONLY booktown=# INSERT INTO distinguished_authors booktown-* VALUES (1809. 'Geisel'. booktown(# 'Theodor Seuss', 'Pulitzer P...
Массивы
Массивы Как упоминалось в главе 3, поля данных PostgreSQL вместо отдельных величин могут содержать конструкции, называемые массивами. Массив сам по себе не является самостоятельным типо...
Создание полей со значениямимассивами
Создание полей со значениями-массивами Чтобы создать простейшее поле-массив, включите в команду CREATE TABLE или ALTER TABLE пару квадратных скобок после имени поля. Квадратные скобки п...
Листинг 7 16 Создание таблицы с полеммассивом
Листинг 7.16. Создание таблицы с полем-массивом booktown=# CREATE TABLE favorite_books booktown-# (employeejid integer, books text[]); CREATE Таблица, созданная в листинге 7.16, по...
Листинг 7 17 Создание таблицы
Листинг 7.17. Создание таблицы с полем, содержащим многомерный массив booktown=# CREATE TABLE favorite_authors (employee_id Integer, booktowntf authors_and_titles text[][]); CREATE...
Вставка значений в полямассивы
Вставка значений в поля-массивы В PostgreSQL предусмотрен специальный синтаксис вставки нескольких значений в одно поле. Этот синтаксис основан на определении массивов-констант. Как уп...
Листинг 7 18 Вставка с использованием массивовконстант
Листинг 7.18. Вставка с использованием массивов-констант booktown=# INSERT INTO favorite_books VALUES booktown-# (102, '{"The HitchhikerVs Guide to the Galaxy"}'); INSER...
Листинг 7 19 Вставка данных в многомерный массив
Листинг 7.19. Вставка данных в многомерный массив booktown=# INSERT INTO favorite_authors bOOktown-# VALUES (102, booktown(# '{{"J.R.R. Tolkien". "The Silmarillion"...
Выборка из полеймассивов
Выборка из полей-массивов При выборке из поля-массива весь массив возвращается в формате константы, описанном в предыдущем разделе. В листинге 7.20 команда SELECT выбирает все элементы...
Листинг 7 20 Выборка из полеймассивов
Листинг 7.20. Выборка из полей-массивов booktown=# SELECT books FROM favorite_books; books {"The Hitchhiker's Guide to the Galaxy"} {"The Hobbit"."Kitten....
Индексы элементов
Индексы элементов Популярность массивов в значительной степени обусловлена тем фактом, что к отдельным элементам можно обращаться при помощи индексов — целых чисел, заключенных в скобк...
Листинг 7 21 Выборка отдельного элемента массива
Листинг 7.21. Выборка отдельного элемента массива booktown=# SELECT books[l] FROM favorite_books: books The Hitchhiker's Guide to the Galaxy The Hobbit (2 rows) При указании инд...
Листинг 7 22 Предотвращение выборки NULL в массивах
Листинг 7.22. Предотвращение выборки NULL в массивах booktown=# SELECT books[2] FROM favorite_books; books Kitten. Squared (2 rows) booktown=# SELECT books[2] FROM favorite_books...
Листинг 7 23 Выборка из многомерного массива
Листинг 7.23. Выборка из многомерного массива booktown=# SELECT authors_and_titles[l][l] AS author, booktown-# authors_and_titles[l][2] AS title booktown-# FROM favorite authors; au...
Срезы
Срезы В PostgreSQL также поддерживается возможность создания срезов при выборке из массива. Срез аналогичен обычному обращению к элементам по индексу, но он описывает интервал значений...
Листинг 7 24 Выборка с использованием среза
Листинг 7.24. Выборка с использованием среза booktown=# SELECT books[l:2] FROM favorite_books; books {"The Hitchhiker's Guide to the Galaxy"} {"The Hobbit"."...
Определение количества элементов
Определение количества элементов Чтобы узнать количество значении, хранящихся в массиве, следует воспользоваться функцией array_dims(). В качестве параметра функции передается идентификато...
Листинг 7 25 Функция array_dims()
Листинг 7.25. Функция array_dims() booktown=# SELECT array_dims(books) FROM favorite_books; array_dims [1:1] [1:2] (2 rows) Обновление данных в полях-массивах Существует т...
Листинг 7 26 Полная модификация массива
Листинг 7.26. Полная модификация массива booktown=# UPDATE favorite_books booktown-# SET books='{"The HitchhikerVs Guide to the Galaxy", booktown'# "The Restaurant...
Листинг 7 27 Модификация отдельного элемента
Листинг 7.27. Модификация отдельного элемента booktown=# SELECT books[l] FROM favorite_books; books The Hitchhiker's Guide to the Galaxy The Hobbit (2 rows) booktown=# UPDATE fav...
Автоматизация стандартных процедур
Автоматизация стандартных процедур PostgreSQL является объектно-реляционной СУБД, что позволило включить в нее ряд нестандартных расширений SQL. Часть этих расширений связана с автомати...
Последовательности
Последовательности Последовательностью (sequence) в PostgreSQL называется объект базы данных, который фактически представляет собой автоматически увеличивающееся число. В других СУБД п...
Создание последовательности
Создание последовательности Последовательности создаются командой SQL CREATE SEQUENCE с положительным или отрицательным приращением. Синтаксис команды CREATE SEQUENCE: CREATE SEQUENCE п...
Листинг 7 28 Создание последовательности
Листинг 7.28. Создание последовательности booktown-# CREATE SEQUENCE shipments_ship_id_seq booktown-# MINVALUE 0; CREATE...
Просмотр последовательностей в базе данных
Просмотр последовательностей в базе данных Команда \d клиента psql показывает, к какому типу относится тот или иной объект базы данных — последовательность, таблица, представление или...
Таблица 7 1 Атрибуты последовательностей
Таблица 7.1. Атрибуты последовательностей Атрибут Тип sequence name name last_value integer increment by integer...
Листинг 7 29 Вывод атрибутов последовательности
Листинг 7.29. Вывод атрибутов последовательности booktown=# SELECT 1ast_value, increment_by booktown-# FROM shipments_ship_id_seq; last_value increment_by 0 | 1 (1 row) Запро...
Операции с последовательностями
Операции с последовательностями Выборка атрибутов последовательности требуется относительно редко. Как правило, все операции с последовательностями выполняются при помощи трех специаль...
Листинг 7 30 Изменение текущего значения последовательности
Листинг 7.30. Изменение текущего значения последовательности booktown=# SELECT nextvaH 'shipments_shipjd_seq'); nextval 1 (1 row) booKtown=# SELECT nextval ('shipments_ship_id_seq'...
Таблица 7 2 Таблица shipments
Таблица 7.2. Таблица shipments Поле Тип Модификатор Id Integer NOT NULL DEFAULT nextval ( 'shipments^ship id seq1) customerjd Int...
Листинг 7 31 Функция currval()
Листинг 7.31. Функция currval() booktown=# INSERT INTO shipments (customer_id, isbn, ship_date) booktown-# VALUES (221. '0394800753', 'now'); INSERT 3628625 1 booktown=# SELECT * F...
Листинг 7 32 Изменение текущего значения последовательности
Листинг 7.32. Изменение текущего значения последовательности booktown=# SELECT setval('shipments_ship_1d_seq'. 1010); setval 1010 (1 row) booktown=# SELECT nextval('shipment...
Удаление последовательности
Удаление последовательности Команда SQL DROP SEQUENCE удаляет последовательность или несколько последовательностей одновременно. Синтаксис команды DROP SEQUEICE: DROP SEQUENCE последовател...
Листинг 7 33 Удаление последовательности
Листинг 7.33. Удаление последовательности booktown=# DROP SEQUENCE shipments_ship_id_seq; DROP Прежде чем уничтожать последовательность, убедитесь в том, что она не используется д...
Листинг 7 34 Проверка зависимостей
Листинг 7.34. Проверка зависимостей Dooktown=# SELECT p.relname. a.adsrc FROM pg_class p JOIN pg_attrdef a booktown-# ON (p.relfilenode = a.adrelid) booktown-# WHERE a.adsrc - '"...
Триггеры
Триггеры Довольно часто перед некоторыми событиями SQL или после них должны выполняться определенные операции — например, проверка логической целостности данных, заносимых в базу, пред...
Создание триггера
Создание триггера Триггер создается на основе существующей функции. PostgreSQL позволяет создавать функции на разных языках программирования, в том числе на SQL, PL/ pgSQL и С. В Postg...
Листинг 7 35 Создание триггера check_shipment
Листинг 7.35. Создание триггера check_shipment booktown=# CREATE TRIGGER check_shipment booktown-# BEFORE INSERT OR UPDATE booktown-# ON shipments FOR EACH ROW booktown-# EXECUTE P...
Получение информации о триггерах
Получение информации о триггерах В PostgreSQL триггеры хранятся в системной таблице pg_trigger, что позволяет получить информацию о существующих триггерах на программном уровне. Структуру...
Таблица 7 3 Таблица pgjrigger
Таблица 7.3. Таблица pgjrigger Поле Тип tgrelid old tgname name tgfoid old tgtype smallint...
Удаление триггера
Удаление триггера Команда DROP TRIGGER удаляет триггер из базы данных. Удаление триггеров, как и их создание командой CREATE TRIGGER, может выполняться только владельцем триггера или с...
Листинг 7 36 Удаление триггера
Листинг 7.36. Удаление триггера booktown=# DROP TRIGGER check_shipment ON shipments: DROP Сообщение DROP означает, что триггер успешно удален. Обратите внимание: при удалении указывае...
Листинг 7 37 Получение имени таблицы связанной с триггером
Листинг 7.37. Получение имени таблицы, связанной с триггером booktown=# SELECT relname FROM pg_class booktown-# INNER JOIN pg_trigger booktown-# ON (tgrelid = relfilenode) booktown...
Транзакции и курсоры
Транзакции и курсоры В PostgreSQL используется специфический подход к обработке транзакций в базах данных. В терминологии SQL транзакцией называется процесс синхронизации результатов вы...
Транзакционные блоки
Транзакционные блоки Транзакционные блоки создаются командой SQL BEGIN, за которой могут следовать необязательные ключевые слова WORK или TRANSACTION. Эти ключевые слова делают команду...
Листинг 7 38 Создание транзакции
Листинг 7.38. Создание транзакции bOOktown=# BEGIN; BEGIN С точки зрения пользователя, вносящего изменения в базу данных, все команды SQL после команды BEGIN выполняются немедленно. Н...
Листинг 7 39 Фиксация транзакции
Листинг 7.39. Фиксация транзакции booktown-# BEGIN; BEGIN booktown=# UPDATE subjects SET location = NULL booktown-f WHERE id = 12; UPDATE 1 booktown=# SELECT location FROM subjects...
Листинг 7 40 Откат транзакции
Листинг 7.40. Откат транзакции booktown=# и BEGIN booktown=# SELECT * FROM subjects WHERE id = 12; id | subject | location 12 | Religion | (1 row) booktown=# UPDATE subjects SET...
Листинг 7 41 Выход из аварийного состояния
Листинг 7.41. Выход из аварийного состояния booktown=# BEGIN: BEGIN booktown=# SELECT * FROM; ERROR: parser: parse error at or near ";" booktown=# SELECT * FROM books;...
Использование курсоров
Использование курсоров Курсор SQL в PostgreSQL представляет собой доступный только для чтения указатель на итоговый набор выполненной команды SELECT. Курсоры часто используются в прило...
Объявление курсора
Объявление курсора Команда SQL DECLARE создает курсор и выполняет его. Этот процесс также называется открытием курсора. Курсор может быть объявлен только в существующем транзакционном...
Листинг 7 42 Объявление курсора
Листинг 7.42. Объявление курсора booktown=# BEGIN; BEGIN booktown=# DECLARE all_books CURSOR booktown-# FOR SELECT * FROM books; SELECT Сообщение SELECT в конце листинга 7.42 гов...
Выборка из курсора
Выборка из курсора Выборка записей из курсора производится командой FETCH. Синтаксис команды FETCH: FETCH [ FORWARD BACKWARD | RELATIVE ] [ число ALL | NEXT | PRIOR ] { IN | FR...
Листинг 7 43 Выборка записей из курсора
Листинг 7.43. Выборка записей из курсора booktown=# FETCH 4 FROM all_books; Id | title | authored | suojectjd 7808 | The Shining | 4156 | 9 4513 | Dune 1 1866 | 15 4267 I 2001:...
Перемещение курсора
Перемещение курсора Курсор поддерживает информацию о текущей позиции в итоговом наборе команды SELECT. Перемещение курсора к заданной записи выполняется командой MOVE. Синтаксис команд...
Листинг 7 44 Перемещение текущей позиции курсора
Листинг 7.44. Перемещение текущей позиции курсора booktown=# MOVE FORWARD 10 booktown-# IN all_books; MOVE...
Закрытие курсора
Закрытие курсора Команда CLOSE закрывает ранее открытый курсор. Курсор также автоматически закрывается при выходе из транзакционного блока, в котором он находится, при фиксации транзак...
Листинг 7 45 Закрытие курсора
Листинг 7.45. Закрытие курсора booktown=# CLOSE al1_books; CLOSE booktown=# COMMIT: COMMIT...
Расширение PostgreSQL
Расширение PostgreSQL PostgreSQL не ограничивает пользователя встроенными функциями и операторами, позволяя ему создавать собственные расширения. Если вам приходится часто выполнять нек...
Создание новых функций
Создание новых функций Разновидность команды SQL99 CREATE FUNCTION, поддерживаемая в PostgreSQL, не обладает прямой совместимостью со стандартом, но зато обеспечивает широкие возможнос...
Создание функций SQL
Создание функций SQL Из всех разновидностей функций в PostgreSQL проще всего создаются «чистые» функции SQL, поскольку их создание не требует ни знания других языков, ни сер...
Листинг 7 46 Создание функции SQL
Листинг 7.46. Создание функции SQL booktown=# CREATE FUNCTION isbn_to_title(text) RETURNS text booktown-l AS 'SELECT title FROM books booktown'f JOIN editions AS e (isbn. id) bookt...
Листинг 7 47 Использование функции SQL
Листинг 7.47. Использование функции SQL booktown=# SELECT isbn_to_title('0929605942'); isbn to title The Tell-Tale Heart (1 row) Созданная функция доступна для всех пользователе...
Создание функций на языке С
Создание функций на языке С СУБД PostgreSQL, написанная на языке С, может динамически подгружать откомпилированный код С без перекомпиляции пакета. Использование команды CREATE FUNC...
Листинг 7 48 Функции на языке С
Листинг 7.48. Функции на языке С /* 1s_zero.c * Простейшие проверочные функции */ int is_zero(int); int is_zero_two(int. int): int is_zero(int incoming) { /* Вернуть true, если а...
Листинг 7 49 Создание функции на языке С
Листинг 7.49. Создание функции на языке С [jworsley@cmd ~]$ gcc -shared is_zero.c -о is_zero.so [jworsley@cmd -]$ psql -U manager booktown Welcome to psql. the PostgreSQL interactive...
Листинг 7 50 Перегрузка функции С
Листинг 7.50. Перегрузка функции С booktown=# CREATE FUNCTION is_zero(int4. int4) RETURNS Boolean booktown-# AS '/home/jworsley/is_zero.so'. 'is_zero_two' booktown-* LANGUAGE 'C':...
Листинг 7 51 Использование функций С
Листинг 7.51. Использование функций С booktown=# SELECT is_zero(0) AS zero. is_zero(l) AS one, booktown-# 1s_zero(6. 0) AS one_zero, is_zero(11.12) AS neither: zero | one | one_zer...
Уничтожение функций
Уничтожение функций Функции уничтожаются владельцем или суперпользователем при помощи команды SQL DROP FUNCTION. Синтаксис команды DROP FUNCTION: DELETE FUNCTION имя ( [ тип_аргуменга [...
Листинг 7 52 Удаление функции
Листинг 7.52. Удаление функции booktown=# DROP FUNCTION isbn_to_title(text); DROP Сообщение сервера DROP означает, что функция была успешно удалена. Команда DROP FUNCTION, как и больш...
Создание новых операторов
Создание новых операторов Кроме пользовательских функций PoslgreSQL позволяет создавать пользовательские операторы. С технической точки зрения операторы всего лишь обеспечивают альтерн...
Создание оператора
Создание оператора Новые операторы создаются командой SQL CREATE OPERATOR. Синтаксис команды CREATE OPERATOR: CREATE OPERATOR оператор ( PROCEDURE = функция [. LEFTARG = тип! ]...
Листинг 7 53 Создание пользовательского оператора
Листинг 7.53. Создание пользовательского оператора booktown=# CREATE OPERATOR !# (PROCEDURE = is_zero, booktown(# LEFTARG = integer); CREATE Сообщение CREATE означает, что создание...
Листинг 7 54 Применение пользовательского оператора
Листинг 7.54. Применение пользовательского оператора booktown=# SELECT * FROM stock WHERE stock !#; isbn | cost | retail | stock 0394900014 | 23.00 | 23.95 | 0 0451198492 | 36.00 |...
Перегрузка операторов
Перегрузка операторов Операторы, как и функции, поддерживают возможность перегрузки. Иначе говоря, в программе можно создать оператор с таким же именем, как у существующего оператор...
Листинг 7 55 Перегрузка пользовательского оператора
Листинг 7.55. Перегрузка пользовательского оператора booktown=# CREATE OPERATOR !# (PROCEDURE = is_zero. booktown(# RIGHTARG = integer); CREATE booktown=# CREATE OPERATOR !# (PROCE...
Листинг 7 56 Использование перегруженного оператора
Листинг 7.56. Использование перегруженного оператора booktownHf SELECT isbn, stock FROM stock booktown-# WHERE stock !# booktown-# AND !# stock booktown-# AND stock !# stock; i...
Удаление оператора
Удаление оператора Операторы удаляются командой DROP OPERATOR. Выполнение этой команды разрешено либо пользователю, создавшему оператор, либо суперпользователю PostgreSQL. ВНИМАНИЕ...
Листинг 7 57 Удаление оператора
Листинг 7.57. Удаление оператора booktown=# DROP OPERATOR !# (integer, integer); DROP Команда в листинге 7.58 выглядит почти так же, но она удаляет перегруженную версию с правым опера...
Листинг 7 58 Удаление перегруженного оператора
Листинг 7.58. Удаление перегруженного оператора booktown=# DROP OPERATOR !# (NONE, integer); DROP...








Начало