Использование того же SQL-запроса, к сожалению, не представляется возможным, насколько я могу судить ...
О вашей идее прохождения базы данных для извлечения информации о каждой таблице для генерации некоторых классов PHP, это одна из вещей, которую Doctrine (самый известный PHP ORM) делает.
Если вы скачаете его и посмотрите на классы в Doctrine/Import/[DatabaseType].php
, вы увидите, что это делается по-разному для каждого вида базы данных.
Например, для MySQL в Doctrine_Import_Mysql
используется следующий фрагмент кода:
'listTableFields' => 'DESCRIBE %s',
С другой стороны, для PostgreSQL у вас есть следующее, в Doctrine_Import_Pgsql
:
'listTableColumns' => "SELECT
a.attnum,
a.attname AS field,
t.typname AS type,
format_type(a.atttypid, a.atttypmod) AS complete_type,
a.attnotnull AS isnotnull,
(SELECT 't'
FROM pg_index
WHERE c.oid = pg_index.indrelid
AND a.attnum = ANY (pg_index.indkey)
AND pg_index.indisprimary = 't'
) AS pri,
(SELECT pg_attrdef.adsrc
FROM pg_attrdef
WHERE c.oid = pg_attrdef.adrelid
AND pg_attrdef.adnum=a.attnum
) AS default
FROM pg_attribute a, pg_class c, pg_type t
WHERE c.relname = %s
AND a.attnum > 0
AND a.attrelid = c.oid
AND a.atttypid = t.oid
ORDER BY a.attnum",
Не все так просто, кажется ^^
Кроме того, ниже каждого класса есть метод с именем listTableColumns
, который не одинаков для каждого типа базы данных ...
Так что, к сожалению, все будет не так просто, как вы надеялись ...
Но, как примечание: возможно, вы могли бы использовать Doctrine для этой части вашего проекта - может быть быстрее, чем заново изобретать колесо; -)