sql >> Database teknologi >  >> RDS >> PostgreSQL

postgresql slet partitionstabeller

For alle, der ender her og leder efter, hvordan man sletter tabelpartitionerne i PostgreSQL, her er det moderne svar.

Løsningen er ikke at bruge en DELETE-sætning, fordi det vil slette dataene uden at droppe de tilsvarende tabelpartitioner, der indeholdt dataene. OP spurgte om håndtering af partitionstabeller, ikke sletning af poster, så enhver løsning, der bruger DELETE-sætninger, tilføjer unødvendige databaseoverhead for sletning af poster, efterlader tomme partitionstabeller på plads og ignorerer fuldstændig en af ​​de primære fordele ved at bruge partitionering; Sænker bordet, når det ikke længere er nyttigt.

I dette tilfælde må løsningen være at DROP den ikke længere nødvendige partitionstabel. Jeg har skrevet en løsning til at løse dette problem i mit produktionsmiljø, svaret er her .

For at løse OP's problem kan den funktion, jeg skrev, bruges med to små revisioner til at ændre fuldt tabelnavn variabel og datoformat. Den fulde tabelnavn-variabellinje skal ændres fra

fullTablename := base_table_name || '_' || to_char(startTime, dateFormat);

til ÅÅÅÅ-MM-DD_log-formatet som dette

fullTablename := to_char(startTime, dateFormat) || '_' || base_table_name;

Så skal datoformatet ændres lidt fra

WHEN partition_plan='day'   THEN 'YYYYDDD'

til den angivne tabelnavnekonvention

WHEN partition_plan='day'   THEN 'YYYY-MM-DD'

Så kan SQL-forespørgslen, der kalder funktionen til at udføre oprydningen, kaldes fra et dagligt vedligeholdelsesscript som dette:

SELECT public.drop_partitions(current_date-180, 'public', 'log', 5, 'day');

Hvilket vil DROPPE ÅÅÅÅ-MM-DD_log-tabellerne, der er 5 dage ældre end 180 dage siden. For en indledende kørsel for at slette snesevis eller hundredvis af gamle tabelpartitioner, skal 5 kan indstilles til en meget højere værdi, der opnår den ønskede effekt.



  1. Sådan bruges GROUP BY efter Having-sætningen Mysql

  2. Forkert strengfejl ved tilføjelse af emoji til en database via en formular

  3. Hvordan kan jeg tælle antallet af indlæg?

  4. At lave en databasetabel i SQL, mærkelig fejl