Vytažení názvů sloupců tabulky – neúplný seznam
- Ellesmess
- Člen | 21
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)