ďťż
 
[PostrgeSQL] Nazwa kolumny PK ďťż
 
[PostrgeSQL] Nazwa kolumny PK
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

[PostrgeSQL] Nazwa kolumny PK



Piotr 'piter' Hlawski - 14-05-2006 00:48
[PostrgeSQL] Nazwa kolumny PK
  Witam,

W jaki sposób wyciągnąć z tablic systemowych nazwę kolumny/kolumn będących
częścią klucza głównego znając tylko nazwę tablicy i schematu? Inaczej
rzecz biorąc - mam np. scheme usr i tablicę uzytkownik, chciałbym znać
nazwę kolumny klucza głównego.

--
..:: Piter // phlawski$gmail,com // gg: 4534287 ::.
Chuck Norris kiedyś zjadł trzy ośmio kilowe steki w godzinę. Pierwsze 45
minut spędził uprawiając sex z kelnerką.





Piotr 'piter' Hlawski - 14-05-2006 00:48

  Piotr 'piter' Hlawski wrote:

> Witam,
>
> W jaki sposób wyciągnąć z tablic systemowych nazwę kolumny/kolumn będących
> częścią klucza głównego znając tylko nazwę tablicy i schematu? Inaczej
> rzecz biorąc - mam np. scheme usr i tablicę uzytkownik, chciałbym znać
> nazwę kolumny klucza głównego.
>

Hmmm wymyśliłem coś takiego:

SELECT
a.attname
FROM pg_class c
LEFT JOIN pg_constraint x ON c.oid = x.conrelid
LEFT JOIN pg_attribute a ON c.oid = a.attrelid
WHERE
c.relname = 'nazwa_tablicy' AND
x.contype = 'p' AND
(a.attnum = x.conkey[1] OR
a.attnum = x.conkey[2] OR
a.attnum = x.conkey[3]);

Tylko to ogranicza do kluczy na max 3 polach - fakt faktem, nie mam nigdzie
tablic z więcej niż dwukolumnowym PK, ale mimo to powyższe zapytanie jakoś
mnie drażni z tym ograniczeniem :)

--
..:: Piter // phlawski$gmail,com // gg: 4534287 ::.
Chuck Norris pobił rekord świata na 100 metrów o pięć sekund. Chuck biegł w
wodzie po szyję i ciągnął za sobą statek.




=?ISO-8859-2?Q?Micha=B3_Zaborowski?= - 15-05-2006 00:09

  Pewnie lepiej by było wypisać nazwę schematu i nazwę tabeli.
Tak czy owak - zapytanie może wyglądać tak:
<code>
SELECT
a.attname
FROM pg_class c
LEFT JOIN pg_constraint x ON c.oid = x.conrelid
LEFT JOIN pg_attribute a ON c.oid = a.attrelid
WHERE
c.relname = 'tfn' AND
x.contype = 'p' AND
a.attnum = any(x.conkey)
</code>
Tak na marginesie operacja '= any()' jest dość szybka, wypada
lepiej niż 'in (select)'. Na listach PG jest do dużych INów.
Chociaż oczywiście zamiast dwóch ostatnich warunków można
zastosować subselect.
--
Pozdrawiam,
Michał Zaborowski (TeXXaS)




Piotr 'piter' Hlawski - 15-05-2006 00:09

  Michał Zaborowski wrote:

> Pewnie lepiej by było wypisać nazwę schematu i nazwę tabeli.
> Tak czy owak - zapytanie może wyglądać tak:
> <code>
> SELECT
> a.attname
> FROM pg_class c
> LEFT JOIN pg_constraint x ON c.oid = x.conrelid
> LEFT JOIN pg_attribute a ON c.oid = a.attrelid
> WHERE
> c.relname = 'tfn' AND
> x.contype = 'p' AND
> a.attnum = any(x.conkey)
> </code>
> Tak na marginesie operacja '= any()' jest dość szybka, wypada
> lepiej niż 'in (select)'. Na listach PG jest do dużych INów.
> Chociaż oczywiście zamiast dwóch ostatnich warunków można
> zastosować subselect.

Dzięki :-)

--
..:: Piter // phlawski$gmail,com // gg: 4534287 ::.
Chuck Norris zagrał Dartha Vadera. Mistrza Yode też.
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    Jak =?ISO-8859-2?Q?zamieni=E6_dwa_pola_jednej_kolumny_?==?ISO-8859-2?Q?w_dw=F3ch_rekordach_za_pomoc=B1_jednego_zapyt? ==?ISO-8859-2?Q?ania=3F?= [mysql] =?ISO-8859-2?Q?po=B3=B1czenie_tabel_wg_kolumn=2C_?==?ISO-8859-2?Q?nie_wierszy?= ms sql server - =?ISO-8859-2?Q?domy=B6lny_format_kolumn_ty?==?ISO-8859-2?Q?pu_datetime?= [ORACLE] Dodanie kolumny typu BLOB - =?ISO-8859-2?Q?wp=B3yw_na?==?ISO-8859-2?Q?_wydajno=B6c?= =?ISO-8859-2?Q?=5BORACLE=2C_ORDER_BY=5D_Czy_indeksowane_?==?I SO-8859-2?Q?kolumny_przy=B6piesz=B1_sortowanie=3F?= pytanie o zapytanie z having count = count z innej kolumny [MySQL/PHP] Wyszukiwanie rekordu przez kolumnę wskazaną przez zmienną =?iso-8859-2?q?Pytanie_SQL__spe=B3niaj=B1ce_wiecej_jak_jeden_ warunek_na_jednej_kolumnie=2E?= =?iso-8859-2?Q?=5BMSSQL2005=5D_Zawarto=B6c_kolumny_varbinary= 28max=29_?= SELECT MAX(nazwaPola) FROM tabela WHERE .... i ORA-01405: pobran? warto?ci? kolumny jest NULL
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • chinska-zupka.opx.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com