Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Получить имена полей по их индексам / 5 сообщений из 5, страница 1 из 1
01.06.2005, 18:56
    #33095887
mrix
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить имена полей по их индексам
Привет АЛЛ!

У меня есть выборка которая возвращает индексы полей(conkey,confkey) внешнего ключа.
http://]http://www.postgresql.org/docs/8.0/interactive/catalog-pg-constraint.html

Каким образом получить __имена__ этих полей?
Хотелось бы изменить эту выборку так, чтоб вместо индексов получить соответствующие имена.


Спасибо!
...
Рейтинг: 0 / 0
01.06.2005, 19:12
    #33095916
XM
XM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить имена полей по их индексам
В PostgreSQL v8 есть ф-я pg_get_constraintdef(), чем не подходит ?
...
Рейтинг: 0 / 0
02.06.2005, 10:17
    #33096544
mrix
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить имена полей по их индексам
Не совсем подходит, потому что выдает : "FOREIGN KEY (fk) REFERENCES table(pk)"
Теперь мне прийдется парсить это, чтоб получить fk,table,pk.
...
Рейтинг: 0 / 0
02.06.2005, 10:49
    #33096652
XM
XM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить имена полей по их индексам
Ну а если вот так:
Код: plaintext
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 type fkey_desc as (
        table_name text,
        table_att  text,
        ref_table_name text,
        ref_att  text
);
create or replace function get_fkey_names (_name text) returns setof fkey_desc as $$
DECLARE
        _tmp     record;
        _i       int;
        _k       int;
        _l       int;
        _names   fkey_desc;
        _tab_name text;
        _ref_tab text;
BEGIN
        select into _tmp * from pg_constraint where conname = _name;
        _tab_name := relname from pg_class where oid = _tmp.conrelid;
        _ref_tab  := relname from pg_class where oid = _tmp.confrelid;
        for _i in  1 ..array_upper(_tmp.conkey,  1 ) LOOP
         _k := _tmp.conkey[_i];
         _l := _tmp.confkey[_i];
         select into _names
              _tab_name as table_name,
              (select attname from pg_attribute pga1 where attrelid = _tmp.conrelid AND attnum = _k LIMIT  1 ) as table_att,
              _ref_tab as ref_table_name,
              (select attname from pg_attribute pga2 where attrelid = _tmp.confrelid AND attnum = _l LIMIT  1 ) as ref_att;
         return next _names;
        END LOOP;
        return;
END
$$ language 'plpgsql';
-- работает примерно так:
select * from get_fkey_names('content_parent_id_fkey');
 table_name | table_att |  ref_table_name   | ref_att
------------+-----------+-------------------+---------
 content    | parent_id |  content          | node_id
...
Рейтинг: 0 / 0
02.06.2005, 11:35
    #33096794
vfabr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить имена полей по их индексам
да в системных каталогах глянь
там помоему 2 вьюхи и 1 таблица один селект и будет тебе счастье
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Получить имена полей по их индексам / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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