Hi,

On 2022-02-19 18:35:18 -0500, Tom Lane wrote:
> Here's an initial patch that gets rid of the need for initdb to
> change the contents of postgres.bki before feeding it to the
> bootstrap backend.  After this, we could look at having the
> backend read the file directly.

Cool!

> I don't really detect any speed change from getting rid of initdb's
> string manipulations, but TBH I was not expecting any.  On my machine,
> that was lost in the noise already, according to perf(1).

Yea, I'd not expect much either. The slowdown around the string stuff that I
did see was on windows.

I would however expect some, but not huge, speedup by getting rid of the
line-by-line reading/writing of postgres.bki, even without moving the handling
to the backend.

A quick way to prototype the moving the handlign to the backend would be to
just call postgres with input redirection from postgres.bki...


> +     /*
> +      * Ideally we'd change the superuser name with ALTER USER, but the 
> backend
> +      * will reject that with "session user cannot be renamed", so we must
> +      * cheat.  (In any case, we'd need a function to escape an identifier, 
> not
> +      * a string literal.)  Likewise, we can't change template1's
> +      * locale/encoding without cheating.
> +      */
> +     static char *final_details[] = {
> +             "UPDATE pg_authid SET rolname = E'SUPERUSER_NAME' WHERE rolname 
> = 'POSTGRES';\n\n",
> +             "UPDATE pg_database SET encoding = E'ENCODING', datcollate = 
> E'LC_COLLATE', datctype = E'LC_CTYPE';\n\n",
> +             NULL
> +     };
> +
> +     detail_lines = replace_token(final_details, "SUPERUSER_NAME",
> +                                                              
> escape_quotes(username));
> +     detail_lines = replace_token(detail_lines, "ENCODING",
> +                                                              
> encodingid_to_string(encodingid));
> +     detail_lines = replace_token(detail_lines, "LC_COLLATE",
> +                                                              
> escape_quotes(lc_collate));
> +     detail_lines = replace_token(detail_lines, "LC_CTYPE",
> +                                                              
> escape_quotes(lc_ctype));

Hm, wouldn't it be less code to just use printf?

Greetings,

Andres Freund


Reply via email to