simulace MySQL na Postgresu

Karel Zak kzak na redhat.com
Úterý Srpen 2 09:00:39 CEST 2005


On Mon, 2005-08-01 at 18:35 +0200, Petr Skoda wrote:

> Ale bohuzel Postgres neumi ani toto ani jinde bezne
> "select columns  from tabulka".

Ma katalog, kde je vse popsane. Je lepsi pouzivat standardni prostredky nez implementovat 
nejake specialni a pouze pro "vnitrnosti" SQL serveru pouzitelne prikazy. 

Nemusite pouzivat primo OID, ale pretypovat z nazvu na OID:

        SELECT attname FROM pg_attribute 
        WHERE attrelid = 'mytable'::regclass;

vrati seznam sloupcu vasi tabulky. Pokud budete chtit i datove typy pak:

        SELECT attname, atttypid::regtype, attlen  FROM pg_attribute 
        WHERE attrelid = 'mytable'::regclass;

jinak viz. http://www.postgresql.org/docs/8.0/interactive/datatype-oid.html
(chodi to i u 7.4). 

Pokud pouzivate schemata tak je vhodne dat jeho nazev k nazvu tabulky
(napr. 'public.mytable'::regclass).

> testreticon=# \d reticon
> ********* QUERY **********
> SELECT c.oid,
>    n.nspname,
>    c.relname
> FROM pg_catalog.pg_class c
>       LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
> WHERE pg_catalog.pg_table_is_visible(c.oid)
>        AND c.relname ~ '^reticon$'
> ORDER BY 2, 3;
> **************************

Coz znamena -- vrat seznam oid, schemat(?) a nazvu viditelnych tabulek.

> ********* QUERY **********
> SELECT relhasindex, relkind, relchecks, reltriggers, relhasrules
> FROM pg_catalog.pg_class WHERE oid = '17218'

> Vubec tomu nerozumim, napr jak najdu ze mam pouzit 17218 ,

 To cislo je OID tabulky (nasel ho v tom prvnim dotazu) -- vsechny
tabulky jsou popsane v pg_class a jejich sloupce v pg_attribute.

> Navic ta funkce vraci i indexy apod, takze to stale neni ono

Vraci o co se pozada :-)

	Karel

-- 
Karel Zak <kzak na redhat.com>



Další informace o konferenci Linux