Postgresql a partitioned tabulka

chloris
Člen | 23
+
0
-

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

Milo
Nette Core | 1283
+
0
-

Důvod pro to není, spíš to s Explorerem ještě nikdo nepoužil. Otevřel bys na to pull request, nebo issue na GitHub?

chloris
Člen | 23
+
+1
-

Díky za info. PR otevřen https://github.com/…ase/pull/286