Postgresql a partitioned tabulka
- chloris
- Člen | 23
Ahoj,
zkusil jsem použít partitioned tabulku (nazvanou records) v Postgresql s LIST klíčem podle jednoho sloupce (rok), vytvořit k ní partitiony podle roku (records_2021, records_2022, …) a použít toto pro Nette Database. Bohužel driver pro Postgresql, když se osahává struktura DB a zjišťují se tabulky (metoda getTables()) obsahuje tento dotaz:
SELECT DISTINCT ON (c.relname)
c.relname::varchar AS name,
c.relkind IN ('v', 'm') AS view,
n.nspname::varchar || '.' || c.relname::varchar AS \"fullName\"
FROM
pg_catalog.pg_class AS c
JOIN pg_catalog.pg_namespace AS n ON n.oid = c.relnamespace
WHERE
c.relkind IN ('r', 'v', 'm')
AND n.nspname = ANY (pg_catalog.current_schemas(FALSE))
ORDER BY
c.relname
kde je v podmínce c.relkind jen ‚r‘, ‚v‘, ‚m‘. Tedy Nette potom ví jen o konkrétních partitionách (records_2021, …), ale ne o té hlavní tabulce (records)
Když však v driveru doplním relkind ještě na ‚p‘ – což je typ který mají ty hlavičkové tabulky, tak ji už NDB vidí a mohu s ní pak pracovat přes Nette Database Explorer.
Je nějaký zamýšlený důvod, proč dotaz nevypadá takto?
SELECT DISTINCT ON (c.relname)
c.relname::varchar AS name,
c.relkind IN ('v', 'm') AS view,
n.nspname::varchar || '.' || c.relname::varchar AS \"fullName\"
FROM
pg_catalog.pg_class AS c
JOIN pg_catalog.pg_namespace AS n ON n.oid = c.relnamespace
WHERE
c.relkind IN ('p', 'r', 'v', 'm')
AND n.nspname = ANY (pg_catalog.current_schemas(FALSE))
ORDER BY
c.relname
nebo zatím nikdo v Postgresu + Nette partition tabulky nepoužil?
viz https://www.postgresql.org/…tioning.html
Díky