Re: Unify drop-by-OID functions - Mailing list pgsql-hackers

From Ranier Vilela
Subject Re: Unify drop-by-OID functions
Date
Msg-id CAEudQAoDdd+T0H9bfk6JCiDZFk+KPVN=bZ4ZuC9Nx=9=whZb8A@mail.gmail.com
Whole thread Raw
In response to Re: Unify drop-by-OID functions  (Robert Haas <robertmhaas@gmail.com>)
Responses Re: Unify drop-by-OID functions
List pgsql-hackers
Em ter., 5 de mai. de 2020 às 13:06, Robert Haas <robertmhaas@gmail.com> escreveu:
On Fri, May 1, 2020 at 5:32 PM Ranier Vilela <ranier.vf@gmail.com> wrote:
> I can suggest improvements?
>
> 1. In case Object is cached, delay open_table until the last moment, for the row to be blocked as little as possible and close the table as quickly as possible.
> 2. In case Object is cached and the tuple is invalid, do not open table.
> 3. Otherwise, is it possible to call systable_endscan, after table_close?
>
> I think that lock resources, for as little time as possible, it is an advantage..

Only if it's correct, which (3) definitely wouldn't be, and I'm
doubtful about (1) as well.
Ok, so the question. If (3) is not safe, obvious we shouldn't use, and must call table_close, after systable_endscan.
Now (1) and (2), I would have no hesitation in using it.
I work with ERP, and throughout the time, the later, lock resources and release them soon, the better, for the performance of the system as a whole.
Even if it doesn't make much difference locally, using this process, throughout the system, efficiency is noticeable.
Apparently, it is more code, but it is less resources used and for less time.
And (2), if it is a case, frequently, no table would be blocked in this function.

Simple examples.

Exemple 1:
FILE * f;
f = fopen("data.txt", "r");
if (f != NULL) {
    char buf[512];
    size_t result;
    result = fread(&buf, sizeof(char), 512, f);
    fclose(f); // we no longer need the resource, release.
    if (result != 0) {
        process(buf);
        printf("buf=%s\n", buf);
    }
}

Exemple 2:
FILE * f;
f = fopen("data.txt", "r");
if (f != NULL) {
    char buf[512];
    size_t result;
    result = fread(&buf, sizeof(char), 512, f);
    if (result != 0) {
        process(buf);
        printf("buf=%s\n", buf);
    }
    fclose(f); // resource blocked until the end.
}

regards,
Ranier Vilela

pgsql-hackers by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: PG 13 release notes, first draft
Next
From: Robert Haas
Date:
Subject: Re: Unify drop-by-OID functions