Thread

Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. Remove make_temptable_name_n().

  2. Add support for REFRESH MATERIALIZED VIEW CONCURRENTLY.

  1. [PATCH] Remove make_temptable_name_n()

    Aleksander Alekseev <aleksander@tigerdata.com> — 2025-10-10T15:22:46Z

    Hi,
    
    The proposed patch removes make_temptable_name_n() in matview.c. This
    function is used only once and can be replaced with psprintf().
    
    --
    Best regards,
    Aleksander Alekseev
    
  2. Re: [PATCH] Remove make_temptable_name_n()

    Nathan Bossart <nathandbossart@gmail.com> — 2025-10-10T15:46:29Z

    On Fri, Oct 10, 2025 at 06:22:46PM +0300, Aleksander Alekseev wrote:
    > The proposed patch removes make_temptable_name_n() in matview.c. This
    > function is used only once and can be replaced with psprintf().
    
    This dates back to commit cc1965a, and I see some discussion about this
    function in the corresponding thread [0].  One thing I don't like about
    the patch is that we lose the comment about relying on the name to never be
    double-quoted.  IMHO that's worth retaining in some form.
    
    [0] https://postgr.es/m/CAP7Qgm%3Djb3xkzQXfGtX9STx8fzd8EDDQ-oJ8ekcyeOud%2ByLCoA%40mail.gmail.com
    
    -- 
    nathan
    
    
    
    
  3. Re: [PATCH] Remove make_temptable_name_n()

    Aleksander Alekseev <aleksander@tigerdata.com> — 2025-10-15T10:33:15Z

    Hi Nathan,
    
    > This dates back to commit cc1965a, and I see some discussion about this
    > function in the corresponding thread [0].  One thing I don't like about
    > the patch is that we lose the comment about relying on the name to never be
    > double-quoted.  IMHO that's worth retaining in some form.
    
    Fair enough. Here is the corrected patch v2.
    
    -- 
    Best regards,
    Aleksander Alekseev
    
  4. Re: [PATCH] Remove make_temptable_name_n()

    Álvaro Herrera <alvherre@kurilemu.de> — 2025-10-15T11:33:41Z

    On 2025-Oct-15, Aleksander Alekseev wrote:
    
    > @@ -634,7 +611,17 @@ refresh_by_match_merge(Oid matviewOid, Oid tempOid, Oid relowner,
    >  	tempRel = table_open(tempOid, NoLock);
    >  	tempname = quote_qualified_identifier(get_namespace_name(RelationGetNamespace(tempRel)),
    >  										  RelationGetRelationName(tempRel));
    > -	diffname = make_temptable_name_n(tempname, 2);
    > +	/*
    > +	 * Create a name for the temporary diff table by appending an underscore
    > +	 * followed by the given integer to the qualified temporary table name.
    > +	 * The result is a palloc'd string.
    > +	 *
    > +	 * As coded, this would fail to make a valid SQL name if the given name were,
    > +	 * say, "FOO"."BAR".  Currently, the table name portion of the input will
    > +	 * never be double-quoted because it's of the form "pg_temp_NNN", cf
    > +	 * make_new_heap().  But we might have to work harder someday.
    > +	 */
    > +	diffname = psprintf("%s_%d", tempname, 2);
    
    Hmm, but instead of keeping the comment about why this is bogus, why not
    just fix it and remove the comment?  You could do something like
    
    nsp = get_namespace_name( .. );
    diffname = psprintf("%s_%s_%d", nsp, RelationGetRelationName( .. ), 2);
    tempname = quote_qualified_identifier(nsp, RelationGetRelationName( ... ));
    
    and then that should be fairly okay, I think, keeping in mind that both
    the names involved are internally-generated short strings -- something
    like pg_temp_19.pg_temp_28356_2.
    
    I think it would be better to rewrite this code not to rely on SPI.
    
    -- 
    Álvaro Herrera               48°01'N 7°57'E  —  https://www.EnterpriseDB.com/
    
    
    
    
  5. Re: [PATCH] Remove make_temptable_name_n()

    Aleksander Alekseev <aleksander@tigerdata.com> — 2025-10-16T11:10:45Z

    Hi Álvaro,
    
    Thanks for your feedback.
    
    > Hmm, but instead of keeping the comment about why this is bogus, why not
    > just fix it and remove the comment?  You could do something like
    >
    > nsp = get_namespace_name( .. );
    > diffname = psprintf("%s_%s_%d", nsp, RelationGetRelationName( .. ), 2);
    > tempname = quote_qualified_identifier(nsp, RelationGetRelationName( ... ));
    >
    > and then that should be fairly okay, I think, keeping in mind that both
    > the names involved are internally-generated short strings -- something
    > like pg_temp_19.pg_temp_28356_2.
    
    Sounds good to me. Here is the updated patch v3.
    
    > I think it would be better to rewrite this code not to rely on SPI.
    
    I will investigate this and start a new thread for better visibility.
    This is an invasive change which requires broader discussion.
    
    --
    Best regards,
    Aleksander Alekseev
    
  6. Re: [PATCH] Remove make_temptable_name_n()

    Shinya Kato <shinya11.kato@gmail.com> — 2025-10-21T01:42:40Z

    Hi,
    
    On Thu, Oct 16, 2025 at 8:11 PM Aleksander Alekseev
    <aleksander@tigerdata.com> wrote:
    >
    > Hi Álvaro,
    >
    > Thanks for your feedback.
    >
    > > Hmm, but instead of keeping the comment about why this is bogus, why not
    > > just fix it and remove the comment?  You could do something like
    > >
    > > nsp = get_namespace_name( .. );
    > > diffname = psprintf("%s_%s_%d", nsp, RelationGetRelationName( .. ), 2);
    > > tempname = quote_qualified_identifier(nsp, RelationGetRelationName( ... ));
    > >
    > > and then that should be fairly okay, I think, keeping in mind that both
    > > the names involved are internally-generated short strings -- something
    > > like pg_temp_19.pg_temp_28356_2.
    >
    > Sounds good to me. Here is the updated patch v3.
    
    Thank you for the patch.
    
    The v1 revision removed make_temptable_name_n and added psprintf,
    which reduced the code size. However, the code size in v3 is almost
    unchanged, so it's unclear how beneficial this change actually is.
    
    Anyway, I have a minor comment about the patch.
    
    + char* nsp = get_namespace_name(RelationGetNamespace(tempRel));
    + char* temprelname = RelationGetRelationName(tempRel);
    + char* diffrelname = psprintf("%s_%d", temprelname, 2);
    
    In PostgreSQL code, "char *xxx" seems to be more commonly used than "char* xxx".
    
    -- 
    Best regards,
    Shinya Kato
    NTT OSS Center
    
    
    
    
  7. Re: [PATCH] Remove make_temptable_name_n()

    Aleksander Alekseev <aleksander@tigerdata.com> — 2025-10-21T12:36:46Z

    Hi Shinya,
    
    Thanks for your feedback.
    
    > The v1 revision removed make_temptable_name_n and added psprintf,
    > which reduced the code size. However, the code size in v3 is almost
    > unchanged, so it's unclear how beneficial this change actually is.
    
    Right, the concept has changed a bit, see Álvaro's comment above.
    
    > Anyway, I have a minor comment about the patch.
    >
    > + char* nsp = get_namespace_name(RelationGetNamespace(tempRel));
    > + char* temprelname = RelationGetRelationName(tempRel);
    > + char* diffrelname = psprintf("%s_%d", temprelname, 2);
    >
    > In PostgreSQL code, "char *xxx" seems to be more commonly used than "char* xxx".
    
    My bad, I forgot to run pgindent. Here is the corrected patch.
    
    -- 
    Best regards,
    Aleksander Alekseev
    
  8. Re: [PATCH] Remove make_temptable_name_n()

    Nathan Bossart <nathandbossart@gmail.com> — 2025-10-21T19:30:53Z

    On Tue, Oct 21, 2025 at 03:36:46PM +0300, Aleksander Alekseev wrote:
    > +	{
    > +		char	   *nsp = get_namespace_name(RelationGetNamespace(tempRel));
    > +		char	   *temprelname = RelationGetRelationName(tempRel);
    > +		char	   *diffrelname = psprintf("%s_%d", temprelname, 2);
    
    I assume the intent of the extra set of curly brackets is to keep the
    declarations of these variables close to where they are used.  In this
    case, the top of the function is only a few lines up, so IMHO we should
    declare them there and save a level of indentation.
    
    > +		pfree(diffrelname);
    > +		if (nsp)
    > +			pfree(nsp);
    
    Any reason to be so careful about freeing these?  We ordinarily let the
    memory context take care of freeing, and refresh_by_match_merge() looks no
    different.
    
    -- 
    nathan
    
    
    
    
  9. Re: [PATCH] Remove make_temptable_name_n()

    Aleksander Alekseev <aleksander@tigerdata.com> — 2025-10-22T13:20:01Z

    Hi Nathan,
    
    > > +     {
    > > +             char       *nsp = get_namespace_name(RelationGetNamespace(tempRel));
    > > +             char       *temprelname = RelationGetRelationName(tempRel);
    > > +             char       *diffrelname = psprintf("%s_%d", temprelname, 2);
    >
    > I assume the intent of the extra set of curly brackets is to keep the
    > declarations of these variables close to where they are used.  In this
    > case, the top of the function is only a few lines up, so IMHO we should
    > declare them there and save a level of indentation.
    >
    > > +             pfree(diffrelname);
    > > +             if (nsp)
    > > +                     pfree(nsp);
    >
    > Any reason to be so careful about freeing these?  We ordinarily let the
    > memory context take care of freeing, and refresh_by_match_merge() looks no
    > different.
    
    These were just a matter of my personal preferences. I have no strong
    opinion on this. Here is the updated patch.
    
    -- 
    Best regards,
    Aleksander Alekseev
    
  10. Re: [PATCH] Remove make_temptable_name_n()

    Nathan Bossart <nathandbossart@gmail.com> — 2025-10-22T17:33:06Z

    On Wed, Oct 22, 2025 at 04:20:01PM +0300, Aleksander Alekseev wrote:
    > Here is the updated patch.
    
    Committed.
    
    -- 
    nathan