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