Loon PostgreSQLis uue andmebaasi, kuid selles on kellegi teise loodud tabelid, domeenid või muud andmebaasiobjektid? Miks see nii on ja mida teha?

Postitas Erki Eessaar 10.11.2022 20:19 (muudeti 11.11.2022 14:28)
PostgreSQLis luuakse uus andmebaas tehes koopia mallandmebaasist (template1). Ülikasutaja õigustes kasutaja saab template1 andmebaasi muuta. Kõik sellesse lisatud andmebaasiobjektid tekivad peale lisamist selle malli põhjal loodud andmebaasidesse.

Palun ärge lisage oma andmebaasiobjekte template1 andmebaasi! Kui olete seda kogemata teinud, siis kustutage need sealt. Kui avastate peale andmebaasi loomist enda andmebaasist kellegi teise loodud andmebaasiobjektid, siis tuleb need kustutada.

Järgnevad käsud saab käivitada psqlis (pgAdminis valige selleks andmebaas ja siis menüüst Tools=>PSQL Tool).

Käsk 1: Kustuta kõik kasutajate skeemides olevad tabelid ja nendest sõltuvad andmebaasiobjektid (nt vaated, rutiinid, trigerid).

SELECT format('DROP TABLE %1$I.%2$I CASCADE;', table_schema, table_name) AS statements
FROM INFORMATION_SCHEMA.tables AS t INNER JOIN INFORMATION_SCHEMA.schemata AS s ON t.table_schema=s.schema_name
WHERE schema_name='public'
OR schema_owner<>'postgres'
\gexec


Käsk 2: Kustuta kõik kasutajate skeemides olevad domeenid.

SELECT format('DROP DOMAIN %1$I.%2$I CASCADE;', domain_schema, domain_name) AS statements
FROM INFORMATION_SCHEMA.domains AS d INNER JOIN INFORMATION_SCHEMA.schemata AS s ON d.domain_schema=s.schema_name
WHERE schema_name='public'
OR schema_owner<>'postgres'
\gexec

Käsk 3: Kustuta kõik kasutajate skeemid, v.a. public.

SELECT format('DROP SCHEMA %1$I CASCADE;', schema_name) AS statements
FROM INFORMATION_SCHEMA.schemata AS s
WHERE schema_name<>'public'
AND schema_owner<>'postgres'
\gexec

gexec käsk võimaldab päringuga koostatud SQL laused automaatselt käivitada.

Hinda postitust:

Keskmine hinne : Pole veel hinnanguid!