Regarding to discussion about large segment size of table files a test pathconf function (see http://www.opengroup.org/onlinepubs/009695399/functions/pathconf.html).

You can see output there:

_PC_FILESIZEBITS - 3rd column
_PC_LINK_MAX - 4th column
_PC_NAME_MAX - 5th column       
_PC_PATH_MAX - 6th column


Solaris Nevada  ZFS     64      -1      255     1024
                UFS     41      32767   255     1024
                FAT     33      1       8       1024
                NFS     41      32767   255     1024
Solaris 8       UFS     41      32767   255     1024
                NFS     40      32767   255     1024
Centos4(2.6.11) EXT3    64      32000   255     4096
                XFS     64      2147483647      255     4096
Mac OSX leopard HFS+    64      32767   255     1024


The result is not really good :(. I tested it also on HP.UX 11.11/11.23, Tru64 v4.0 and MacOS tiger (big thanks to Tomas Honzak for machine access) and Tiger and Tru64 does not recognize _PC_FILESIZEBITS definition and HP_UX returns errno=EINVAL. I also don't trust Linux result on EXT3. It seems that only Solaris and Leopard returns relatively correct result (33 bit on FAT FS is probably not correct).

I attached my test program, please let me know your result from your favorite OS/FS (binary must be saved on tested FS).

However, I think we cannot use this method to test max file size on FS :(.

        Comments, ideas?

                Zdenek

PS: Does pg_dump strip a large file or not?
#include <unistd.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <limits.h>

int main(int argc, char** argv)
{
	long ret;
	int err;

	errno = 0;
	ret = pathconf(argv[0],_PC_FILESIZEBITS);
	if ( ret == -1)
		if ( errno == 0)
			printf("_PC_FILESIZEBITS = unlimited\n");
		else
			printf("_PC_FILESIZEBITS = %s\n", strerror(errno));
	else	
		printf("_PC_FILESIZEBITS = %li\n", ret);

	/* ******************** */
	errno = 0;
	ret = pathconf(argv[0],_PC_LINK_MAX);
	if ( ret == -1)
		if ( errno == 0)
			printf("_PC_LINK_MAX = unlimited\n");
		else
			printf("_PC_LINK_MAX = %s\n", strerror(errno));
	else	
		printf("_PC_LINK_MAX = %li\n", ret);

	/* ******************** */
	errno = 0;
	ret = pathconf(argv[0],_PC_NAME_MAX);
	if ( ret == -1)
		if ( errno == 0)
			printf("_PC_NAME_MAX = unlimited\n");
		else
			printf("_PC_NAME_MAX = %s\n", strerror(errno));
	else	
		printf("_PC_NAME_MAX = %li\n", ret);

	/* ******************** */
	errno = 0;
	ret = pathconf(argv[0],_PC_PATH_MAX);
	if ( ret == -1)
		if ( errno == 0)
			printf("_PC_PATH_MAX = unlimited\n");
		else
			printf("_PC_PATH_MAX = %s\n", strerror(errno));
	else	
		printf("_PC_PATH_MAX = %li\n", ret);

	return 0;
}
-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to