PHP Doku:: Gibt Metadaten einer Tabelle als Array zurück -

Verlauf / Chronik / History: (1) anzeigen

Sie sind hier:
Doku-StartseitePHP-HandbuchFunktionsreferenzDatenbankerweiterungenAnbieterspezifische DatenbankerweiterungenPostgreSQLPostgreSQL-Funktionenpg_meta_data

Ein Service von Reinhard Neidl - Webprogrammierung.





(PHP 4 >= 4.3.0, PHP 5)

pg_meta_data Gibt Metadaten einer Tabelle als Array zurück


array pg_meta_data ( resource $connection , string $table_name )

pg_meta_data() gibt die Tabellendefinition für table_name in einem Array zurück.


Diese Funktion ist EXPERIMENTELL. Das Verhalten, der Funktionsname und alles Andere, was hier dokumentiert ist, kann sich in zukünftigen PHP-Versionen ohne Ankündigung ändern. Seien Sie gewarnt und verwenden Sie diese Funktion auf eigenes Risiko.



PostgreSQL Verbindungskennung


Der Tabellenname


Ein array, das die Tabellendefinition enthält oder FALSE, falls ein Fehler auftrat.


Beispiel #1 Metadaten für eine Tabelle ermitteln

pg_connect("dbname=publisher") or die("Verbindungsaufbau fehlgeschlagen");

$meta pg_meta_data($dbconn'authors');
  if (
is_array($meta)) {

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

array(3) {
array(5) {
  string(7) "varchar"
  ["not null"]=>
  ["has default"]=>
array(5) {
  string(4) "int2"
  ["not null"]=>
  ["has default"]=>
array(5) {
  string(7) "varchar"
  ["not null"]=>
  ["has default"]=>

Siehe auch

  • pg_convert() - Konvertiert die Werte eines assoziativen Arrays in passende Werte für SQL-Kommandos.

4 BenutzerBeiträge:
- Beiträge aktualisieren...
jsnell at e-normous dot com
13.11.2007 0:24
The built in function does not provide any support for selecting a schema.  If you need schema support and do not want to alter your SEARCH_PATH, the following function can provide it:

 function meta_data($table, $schema = 'public')
$result = pg_query_params("SELECT a.attname, a.attnum, t.typname, a.attlen, a.attnotNULL, a.atthasdef, a.attndims
FROM pg_class as c, pg_attribute a, pg_type t, pg_namespace n
WHERE a.attnum > 0
AND a.attrelid = c.oid
AND c.relname = $1
AND a.atttypid = t.oid
AND n.oid = c.relnamespace
AND n.nspname = $2
ORDER BY a.attnum", array($table, $schema));
$fields = array();
while($row = pg_fetch_array()) {
$fields['attname'] = $row;
        return $fields;
yarnofmoo at gmail dot com
27.06.2007 17:32
You can get some possibly more useful information with the query:

SELECT table_name, column_name, data_type, character_maximum_length FROM information_schema.columns WHERE table_name='tablename';
rburghol at vt dot edu
24.06.2005 15:37
When querying on meta data from a temp table, the meta data seems to persist even if a fresh connection is established, where the temp table no longer exists.

 For example, if you create a connection and a temp table like so:
$dbconn1 = pg_connect('blah blah', , PGSQL_CONNECT_FORCE_NEW);
pg_exec($dbconn1,'create temp table foo as select 'foo' as namecol, 'bar' as valcol');

Then create a new connection

$dbconn2 = pg_connect('blah blah', , PGSQL_CONNECT_FORCE_NEW);

And query the meta data for table 'foo' in this new connection, it will report the facts about this table:

"'Array ( [foo] => Array ( [num] => 1 [type] => varchar... "

However, trying to remove this table:
pg_exec($dbconn,'drop table foo');

Throws an error:
pg_exec(): Query failed: ERROR: table "foo" does not exist in ...
dmiller at NOSPAM dot judcom dot nsw dot gov dot au
18.06.2003 10:31
This function seems to be case-sensitive on tablename (php-4.3.1)

The Array returned is of the following structure
['field name'] => Array
     ['num'] => Field number starting at 1
     ['type'] => data type, eg varchar, int4
     ['len'] => internal storage size of field. -1 for varying
     ['not null'] => boolean
     ['has default'] => boolean

for Varied size datatypes (varchar, text, etc)
you can get the max data length from the system table pg_attribute.atttypmod -4
select attnum, attname , atttypmod -4 as field_len
from pg_attribute, pg_class
where relname='$tablename'
and attrelid=relfilenode
and attnum>=1

PHP Powered Diese Seite bei
The PHP manual text and comments are covered by the Creative Commons Attribution 3.0 License © the PHP Documentation Group - Impressum - mail("TO:Reinhard Neidl",...)