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

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

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


Спасибо!
...
Рейтинг: 0 / 0
Получить имена полей по их индексам
    #33095916
Фотография XM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В PostgreSQL v8 есть ф-я pg_get_constraintdef(), чем не подходит ?
...
Рейтинг: 0 / 0
Получить имена полей по их индексам
    #33096544
mrix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не совсем подходит, потому что выдает : "FOREIGN KEY (fk) REFERENCES table(pk)"
Теперь мне прийдется парсить это, чтоб получить fk,table,pk.
...
Рейтинг: 0 / 0
Получить имена полей по их индексам
    #33096652
Фотография 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
Получить имена полей по их индексам
    #33096794
vfabr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да в системных каталогах глянь
там помоему 2 вьюхи и 1 таблица один селект и будет тебе счастье
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Получить имена полей по их индексам
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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