Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
CREATE TABLE
Хотя таблица servers создавалась с одним полем, три других она унаследовала от родительской:
test=> insert into servers values('192.168.0.254', 'Серверная',
test-> 'FreeBSD 5.2', '{"WWW", "FTP"}');
INSERT 18991 1
В родительской таблице видим записи и из родительской, и из дочерней, но без учета полей, заданных только в дочерней:
test=> select * from mashines;
ip | placement | ostype
---------------+-------------------+-------------
192.168.0.1 | Зал | Windows 98
192.168.0.254 | Серверная | FreeBSD 5.2
(записей: 2)
В дочерней – только те, которые заносились непосредственно в нее:
test=> select * from servers;
ip | placement | ostype | services
---------------+-----------+-------------+-----------
192.168.0.254 | Серверная | FreeBSD 5.2 | {WWW,FTP}
(1 запись)
Ключевое слово ONLY позволяет выбрать записи из родительской таблицы без учета содержимого дочерней:
test=> select * from only mashines;
ip | placement | ostype
-------------+-------------------+------------
192.168.0.1 | Зал | Windows 98
(1 запись)
Как видите, наследование позволяет создавать вполне логичные и удобные для работы структуры. Следует также заметить, что удалить базовую таблицу можно только со всеми производными (указав ключевое слово CASCADE в команде DROP TABLE).
PostgreSQL позволяет создавать собственные функции, которые сохраняются в базе данных и могут быть использованы при модификации полей записи, в операциях выборки по условию, как триггеры, и т. д. Разработчику, помимо процедурного языка PL/pgSQL (являющегося аналогом PL/SQL в СУБД Oracle), доступны PL/Perl, PL/Python и др. Для этого PostgreSQL должна собираться с соответствующими опциями.
Те, кому доводилось работать с Oracle, знакомы с такой удобной возможностью для автоматизации операций с БД, как триггеры. Спешу их обрадовать – PostgreSQL также поддерживает триггеры в полном объеме. Триггер связывает функцию с операцией модификации таблицы. Например, с его помощью можно проверять правильность вводимых данных или при удалении одной записи автоматически удалять и все, логически связанные с удаляемой (или соответствующим образом модифицировать). В данной статье я не буду останавливаться на описании работы с функциями и триггерами, поскольку это довольно обширная тема.
Следующая особенность СУБД – возможность создавать представления пользователя (view), которые представляют собой результаты выборки (запроса), доступные для непосредственного обращения к ним в будущем без пересылки повторных запросов. Помимо упрощения логики работы с БД (когда вместо сложных запросов к нескольким таблицам можно отправить весьма простой запрос к представлению пользователя), эта возможность позволяет гибко управлять доступностью данных для различных пользователей. Например, если в БД есть таблица, содержащая имена и пароли клиентов, но оператор должен получить доступ только к именам, то достаточно создать представление, в которое выбрать поле «Имя», и дать оператору доступ к нему, а возможность чтения самой таблицы исключить.