Re: BUG #15460: Error while creating index or constraint

Thomas Munro <thomas.munro@enterprisedb.com>

From: Thomas Munro <thomas.munro@enterprisedb.com>
To: Peter Geoghegan <pg@bowt.ie>
Cc: paul.vanderlinden@mapcreator.eu, PostgreSQL mailing lists <pgsql-bugs@lists.postgresql.org>, Heikki Linnakangas <hlinnaka@iki.fi>
Date: 2018-11-13T09:49:26Z
Lists: pgsql-bugs

Attachments

On Tue, Nov 13, 2018 at 10:13 PM Thomas Munro
<thomas.munro@enterprisedb.com> wrote:
> On Tue, Oct 30, 2018 at 4:15 AM Peter Geoghegan <pg@bowt.ie> wrote:
> > > ERROR:  could not determine size of temporary file "0"
>
>                 filesize = BufFileSize(file);
>                 if (filesize < 0)
>                         ereport(ERROR,
>                                         (errcode_for_file_access(),
>                                          errmsg("could not determine
> size of temporary file \"%s\"", filename)));
>
> Ahh.  I think we may be overflowing a 32 bit off_t on this platform.

I think using pgoff_t would fix the problem on Windows, but on other
systems where it maps directly to off_t it might also be 32 bits, so
I'm not entirely sure what pgoff_t is for.  Perhaps we should just use
int64 directly for this?  Like in the attached draft patch.  I don't
have a Windows system to test it on.  A separate bug report that came
in today[1] has repro steps that could be used to validate it.

[1] https://www.postgresql.org/message-id/flat/CAHDGBJP_GsESbTt4P3FZA8kMUKuYxjg57XHF7NRBoKnR%3DCAR-g%40mail.gmail.com

-- 
Thomas Munro
http://www.enterprisedb.com

Commits

  1. Have BufFileSize() ereport() on FileSize() failure.

  2. Use 64 bit type for BufFileSize().

  3. Adjust trace_sort log messages.

  4. Fix some sloppiness in the new BufFileSize() and BufFileAppend() functions.