-
ну еще бы там и select маша фром петя не работало бы.
только где кайф-то от такой урезанной поддержки фич сервера
-
> только где кайф-то от такой урезанной поддержки фич сервера
Там фичи совершенно в другом. SQL - он и в африке SQL, тут ничего такого не придумать. А вот то, что лёгким движением руки можно унаследоваться от таблицы - это да. Я когда это увидел - чуть оргазм не испытал. Потому как на предыдущей работе приходилось все это ручками делать. Как таблицы, так и запросы по наследникам. А тут - вообще с полтычка.
-
3.5. Inheritance
Inheritance is a concept from object-oriented databases. It opens up interesting new possibilities of database design.
Let's create two tables: A table cities and a table capitals. Naturally, capitals are also cities, so you want some way to show the capitals implicitly when you list all cities. If you're really clever you might invent some scheme like this:
CREATE TABLE capitals (
name text,
population real,
altitude int, -- (in ft)
state char(2)
);
CREATE TABLE non_capitals (
name text,
population real,
altitude int -- (in ft)
);
CREATE VIEW cities AS
SELECT name, population, altitude FROM capitals
UNION
SELECT name, population, altitude FROM non_capitals;
This works OK as far as querying goes, but it gets ugly when you need to update several rows, for one thing.
A better solution is this:
CREATE TABLE cities (
name text,
population real,
altitude int -- (in ft)
);
CREATE TABLE capitals (
state char(2)
) INHERITS (cities);
In this case, a row of capitals inherits all columns (name, population, and altitude) from its parent, cities. The type of the column name is text, a native PostgreSQL type for variable length character strings. State capitals have an extra column, state, that shows their state. In PostgreSQL, a table can inherit from zero or more other tables.
For example, the following query finds the names of all cities, including state capitals, that are located at an altitude over 500 feet:
SELECT name, altitude
FROM cities
WHERE altitude > 500;
which returns:
name | altitude
-----------+----------
Las Vegas | 2174
Mariposa | 1953
Madison | 845
(3 rows)
On the other hand, the following query finds all the cities that are not state capitals and are situated at an altitude of 500 feet or higher:
SELECT name, altitude
FROM ONLY cities
WHERE altitude > 500;
name | altitude
-----------+----------
Las Vegas | 2174
Mariposa | 1953
(2 rows)
Here the ONLY before cities indicates that the query should be run over only the cities table, and not tables below cities in the inheritance hierarchy. Many of the commands that we have already discussed — SELECT, UPDATE, and DELETE — support this ONLY notation.
Note
Although inheritance is frequently useful, it has not been integrated with unique constraints or foreign keys, which limits its usefulness. See Section 5.8, “Inheritance” for more detail.
-
А вот то, что лёгким движением руки можно унаследоваться от таблицы - это да.
честно говоря не вставило меня от этого. в оракле создаем тип с полями методами и свойствами, потом целое дерево наследников. потом таблицу на основе этого типа. тоже легким движением руки.
-
> честно говоря не вставило меня от этого. > в оракле создаем тип с полями методами и свойствами, потом > целое дерево наследников. потом таблицу на основе этого > типа. > тоже легким движением руки.
Ну не знаю, я с ораклом практически и не работал. Так, игрался чуть-чуть на досуге. Я про свои впечатления после MSSQL.
На самом деле об увеличившимся внедрении постгреса можно по sql.ru судить.
-
Легыч, и не делают они упор на web ни в коем случае.
-
> Поросенок Винни-Пух © (29.09.08 15:54) [98]
Не совсем понял, что имеется ввиду. Не имеет связка Оракл плюс эти штуки, или не имеет Постгрес?
Если второе, то неправда.
1. RETURNING: www.postgresql.org/docs/8.3/static/sql-insert.html www.postgresql.org/docs/8.3/static/sql-update.html www.postgresql.org/docs/8.3/static/sql-delete.html
2. Честно не знаю кто такие клобы, но блобов хватает. При чем в двух реализациях: bytea vs LO (oid). Это для бинарных чисто данных. Текстовые в расчет не берем. Вот тут про различия доступно: microolap.com/products/connectivity/postgresdac/help/TipsAndTricks/ByteaVsOid.htm
А Оракл LISTEN\NOTIFY умеет?
-
Сорри за вид ссылок, авторезалка не пущала
-
> Легыч, и не делают они упор на web ни в коем случае.
Знаешь, по тому, на каких языках, кроме PLPG можно функции писать - у меня немножко другое мнение сложилось... :) Да и с теми, с кем знаком и чтоб под постгрес что-то делали (кроме тебя) - в основном под perl фигачат.
-
Да, ну и самое, что меня просто убило - это возможности тончайшей настройки полнотекстового поиска. Это просто чума.
-
> Ega23 © (29.09.08 16:35) [108]
Не, так не честно. Перловка и ПХПшка вообще недавно появились. На С народ полюбляет еще к ним приблудки писать.
А народ пересаживается на Постгрес ибо у Мускула использование ихней библиотеки клиентского доступа теперь платное.
-
Если второе, то неправда.
1. RETURNING: www.postgresql.org/docs/8.3/static/sql-insert.html www.postgresql.org/docs/8.3/static/sql-update.html www.postgresql.org/docs/8.3/static/sql-delete.html
Ты не понял юмора. То, что в оракле и постгрессе есть ретурнинг, - это еще само по себе ни тепло ни холодно. Нужно еще наличие клиентских средств чтобы заюзать все это.
Мой пример из [98] был как раз про это. Фича есть, но не заюзать.
-
А Оракл LISTEN\NOTIFY умеет?
Там же целый аппсервер есть.
-
Кстати, Skype тоже сидит на Постгресе.
> Нужно еще наличие клиентских средств чтобы заюзать все это.
Не понимаю юмора. Беру в pgAdmin пишу INSERT ..., бабах и получаю резалт сет. Или имеется ввиду именно библиотека доступа, которая эту возможность даст самому программисту?
-
> pasha_golub (29.09.2008 16:46:50) [110]
У меня на RH в 1998 году были уже и Perl и PHP и при том не первые версии, так что PG явно моложе, чем они.
-
> Anatoly Podgoretsky © (29.09.08 17:01) [114]
> У меня на RH в 1998 году были уже и Perl и PHP
Я про PL/Perl & PL/php. Или они тоже были доступны в 98?
-
> У меня на RH в 1998 году были уже и Perl и PHP и при том > не первые версии, так что PG явно моложе, чем они.
Он имел ввиду, что появилась возможность писать хранимки для Postgres на Php и Perl. Там когда хранимку пишешь, нужно указывать, на каком языке она идет. Поддерживается как собственный plpgsql, так и php, Perl, puby, c/c++ и чё-то вроде ещё.
-
> plpgsql, так и php, Perl, puby, c/c++
Tcl, python и вообще все что сам напишешь.
Каждый язык для написания хранимок должен экспортировать две функции: handler & validator.
Вторая проверяет синтаксис во время выполнения CREATE PROCEDURE. Первая соответственно выполняет саму хранимку. Так что PL/Pascal не такая и невозможность.
-
Не понимаю юмора.
Ну нет так нет. Более понятно чем уже сказано я не могу.
-
> Ega23 © (29.09.08 16:20) [102]
красиво.
В оракле тоже самое можно сделать другим синтаксисом, но: поставить foreign key на поля наследника не получится (либо я что-то не догоняю, но это врядли :)
В постгресе физически это что будет? view над всеми inherited таблицами или все вместе хранится?
|