Vytažení názvů sloupců tabulky – neúplný seznam

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Ellesmess
Člen | 21
+
0
-

Zdravím,
pracuji na drobném projektu a ladím takovou drobnost, kde mi podrazila nohy (nejspíše mou neznalostí) Nette\Database – potřebuji si vytáhnout seznam sloupců v zadané tabulce. To dělám pomocí Connection->getSupplementalDriver()->getColumns(<tabulka>)), ovšem ve výsledku mi některé sloupce chybí (používám pouze základní typy, v mém případěš např. chybí konkrétně character varying). Nevím, proč na výstupu nejsou všechny sloupce :

  • zkoušel jsem se do báze připojiít jako superuser
  • zkoušel jsem smazat temp
  • zkoušel jsem nette 2.0.4 i aktuálně staženou DEV verzi 2.1

DB je PostgreSQL.

Děkuji za všechny připomínky – pokud existuje nějaká cesta, jak vytáhnout sloupce bez závislosti na databázi, rád ji použiju, nerad bych psal dotaz pro PG…

Ellesmess

Edit:
Podíval jsem se do Nette\Database, ovladače pro PostgreSQL a zkusil jsem si pustit dotaz, kterým se vytahují sloupce a s překvapením jsem zjistil, že z nějakého důvodu (který nechápu) dotaz ignoruje sloupce, které mají nastavenou nějakou constraintu (musí být NULL nebo PRIMARY KEY), čili aby se mi zobrazili všechny sloupec, musel bych si dronpout veškeré constrainty – co to má za význam??

SELECT
    c.column_name AS name,
    c.table_name AS table,
    upper(c.udt_name) AS nativetype,
    greatest(c.character_maximum_length, c.numeric_precision) AS size,
    FALSE AS unsigned,
    c.is_nullable = 'YES' AS nullable,
    c.column_default AS default,
    tc.constraint_type,
    coalesce(tc.constraint_type = 'PRIMARY KEY', FALSE) AND strpos(c.column_default, 'nextval') = 1 AS autoincrement,
    coalesce(tc.constraint_type = 'PRIMARY KEY', FALSE) AS primary
FROM
    information_schema.columns AS c
    LEFT JOIN information_schema.constraint_column_usage AS ccu USING(table_catalog, table_schema, table_name, column_name)
    LEFT JOIN information_schema.table_constraints AS tc USING(constraint_catalog, constraint_schema, constraint_name)
WHERE
    c.table_name = 'characters' AND
    c.table_schema = current_schema() AND
    (tc.constraint_type IS NULL OR tc.constraint_type = 'PRIMARY KEY')
ORDER BY
    c.ordinal_position

třetí řádka v WHERE je to, co mě trápí a u čeho by mě zajímalo, proč tomu tak je…

díky

Editoval Ellesmess (31. 7. 2012 12:09)