simulace MySQL na Postgresu
Chlopcik Ales
chlopcik na vojnem-plzen.cz
Úterý Srpen 2 03:38:14 CEST 2005
Petr Skoda wrote:
>
> Omlouvam se za lehky off-topic, ale google selhal totalne
> a predpokladam, ze lidi delajici s Postgresql ho provozuji na linuxu:
>
> Potrebuju predelat skripty v pythonu pro MySQLdb konektivitu
> na pripojeni na PostgreSQL pres pyPgSQL balik. Oba implementuji rozhrani
> API-DB , vysledky lezou pres kurzory apod ...
>
> Jenze v tech skriptech se zada vypsat jmena vsech sloupcu z dane tabulky ,
> s cimz se dal pracuje - konkretne se hledaji podle jmena sloupce v dane
> tabulce nejaka klicova slova v externich souborech, tedy pokud zmenim
> tabulku - pridam sloupce, chci je vedet v python slovniku.
>
> Na to se v MySQLdb pouziva volani
>
> kurzor = db.cursor()
> kurzor.execute("SHOW FULL FIELDS FROM " + table)
> data = kurzor.fetchall()
>
> Ale bohuzel Postgres neumi ani toto ani jinde bezne
> "select columns from tabulka".
>
> presne na toto se ptal nekdo i v postgres konferenci a odpoved byla
> bohuzel ze to umi jen klient psql (\d tabulka)
> autori se vymlouvaji, ze je to slozite u objektu ale ze se obsah tohoto
> prikazu preklada do SQL, ale kdyz jsem si vypsal , nejsem z toho sachovani
> s internimi taulkami OIDy apod vubec moudry. Navic to nevraci jen sloupce
> ale i spoutu delasich veci o tabulce co nechci.
> krome teto odpovedi/neodpovedi jsem uz nikde nic nenasel.
>
> Je mi velmi divne, ze tuto funkci nikdo nepotreboval - nenajde se nekdo
> kdo by mi polopatisticky napsal jak to udelat ?
>
> zde je vystup psql -E
>
> 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;
> **************************
>
> ********* 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 ,
> Navic ta funkce vraci i indexy apod, takze to stale neni ono
>
> Diky za radu
> * Petr Skoda Tel : (323) 649201, l. 361 *
DDV
Netusim, jestli odpovim na Vas dotaz, ale snad ...
Nechci se moc poustet do teirie kolem OID, ale je TO neco jako interni
unikatni klic k datum. Pokud je tabulka zalozena s OID (pri CREATE
TABLE), pak pomoci nej lze jednoznacne identifikovat jediny zaznam, i
kdyby ji bylo janevimkolik uplne stejnych.
Ted k tou zjisteni jmen sloupcu. Resil bych TO klasickym SELECT * FROM
do asociativniho pole. Nazvy sloupcu jsou Vam vraceny jako klice v tom
asociativnim poli.
<?php
$Db = pg_connect(".....");
....
$rs = pg_query ($Db, "SELECT FIRST 1 * FROM tabulka");
if (!$rs)
{
pg_close($Db);
die ("Chyba. Radsi TO zabalim.\n");
};
$cnt = 0;
$zaznam = pg_fetch_array ($rs, $cnt, PGSQL_ASSOC) ) )
....
foreach ($zaznam as $klic => $hodn)
{
print "'$klic'";
};
?>
Snad Vam TO pomuze.
Ales
Další informace o konferenci Linux