PHP seriál - Výpis struktury tabulky v Postgre a MySQL (DESCRIBE table)
V práci jsem narazil na jeden problém. Potřeboval jsem udělat příkaz DESCRIBE table (výpis struktury tabulky v jazyce SQL), ale tak aby to chápalo PgSQL(postgre). Zjistil jsem, že toto není standartně podporovaný příkaz. Začal jsem tedy brouzdat po internetu ale nenarazil jsem na nic, co by mi pomohlo. Po delším bádání vám přináším alternativu, která funguje.
Takže nebudu vás napínat. Jde o tohle. Jak jsem řekl, describe table
nezná systém postgre. V MySQL je zase problém, že describe nevypisuje
k buňkám komentáře. Může vám to připadat jako zbytečná věc, ale
třeba jsem je potřeboval. Stavím (programuji) totiž třídu, která umožní
komunikovat univerzálně mezi databázemi Postgre a MySQL. Je jedno jakým
způsobem napíšete SQL dotaz, třída si ho sama upraví pro odpovídající
systém. Určitě by to pár lidí využilo. A jelikož myšlenkou té třídy
bylo, aby vkládání i aktualizace záznamů šli jednoduše a bez nutnosti
neustále něco přepisovat, když změním kolonku v databázi, přidal jsem
funkci auto_insert a auto_update. Problém, kdy jsem začal potřebovat
komentáře byl když zaznamenávám u aktualizace i hostorii změn. Sloupce
se většinou nepojmenovávají moc česky a ve výpisu historie aktualizací to
pak vypadá divně. Proto název který se zobrazí se zapíše do komentáře a
je to. Nu ale dost obecných řečiček. Pokud by o tu třídu někdo měl
zájem, napište mi do komentářů a nějak se domluvíme. Je zatím ve
vývoji, tak volně k dispozici zatím není.
Příkaz pro MySQL, který vypíše strukturu tabulky i s komentářem:
SELECT
`COLUMN_NAME` AS `Field`, `COLUMN_TYPE` AS `Type`,
`IS_NULLABLE` AS `Null`, `COLUMN_KEY` AS `Key`,
`COLUMN_DEFAULT` AS `Default`,
`EXTRA` AS `Extra`, `COLUMN_COMMENT` AS `Comment`
FROM COLUMNS
WHERE `table_schema` = 'databaze' AND `table_name` = 'tabulka';
Místo Databáze a Tabulka napiste vaše údaje. SQL dotaz
vykonejte na připojené databázi information_schema.
Příkaz pro PgSQL, který vypíše strukturu tabulky (také s komentářem):
SELECT
a.attname AS Field, format_type(a.atttypid, a.atttypmod) as Type,
a.attnotnull AS Null, adef.adsrc AS Key, description as Comment
FROM pg_attribute a LEFT JOIN pg_attrdef adef ON a.attrelid=adef.adrelid AND
a.attnum=adef.adnum LEFT JOIN pg_type t ON a.atttypid=t.oid
LEFT JOIN pg_description d ON (a.attrelid = d.objoid AND a.attnum = d.objsubid)
WHERE a.attrelid = (SELECT oid FROM pg_class WHERE relname='tabulka')
AND a.attnum > 0
ORDER BY a.attnum;
Pro Postgre je dotaz krapet složitější, ale je to plně funkční. Pokud
někdo zná jednodušší variantu, dejte mi vědět
.
««« Předchozí text: PHP seriál od A do Z - Lekce třetí - Programovací prostředí Následující text: Valentýna bych zrušíl, aneb Nemám rád dnešní proamerický svět »»»
autor: Honzííík |
Čtvrtek 7. 02. 2008, 21.49 | tisk | Internet, PHP |
3 komentáře | 20876x
Komentáře k textu
Rss komentářů tohoto textu - Formulář pro nový komentář
Já používám na výpis struktury tabulky příkaz „\d nazev_tabulky;“ v PuTTy funguje skvěle. (pgsql)
[1] Lukin: V Putty sice ano, ale pokud pak pracuješ pomocí např PHP s databázovou třídou, tak je ti \d k ničemu
. Já to potřeboval tehdy právě k sestavení databázového objektu, který se strukturou tabulky pracuje.
Stručně o mně
Nové komentáře
Online 1 člověkVydané články
PHP seriálALBION Group