Does PostgreSQL use atomic file creation of FS?
Hello. Does PostgreSQL use atomic file creation on FS? How does PostgreSQL catch situation when system crashes between open call and write call? I am interesting in this because I would like use PostgreSQL on network file system. Thank you.
Re: Does PostgreSQL use atomic file creation of FS?
Thank you. But I have read this. I said about network file system only for example. I would like to known how PostgreSQL handles this specific case (of course if someone knowns a answer): fd = open(file, "w"); write(fd, data); // crash and now I have empty file which isn't correct fsync(fd); PS. I think PostgreSQL doesn't have this problem. On 12/12/18 15:37, Karsten Hilbert wrote: > On Wed, Dec 12, 2018 at 02:48:12PM +0300, Dmitry Lazurkin wrote: > >> Does PostgreSQL use atomic file creation on FS? How does PostgreSQL >> catch situation when system crashes between open call and write call? I >> am interesting in this because I would like use PostgreSQL on network >> file system. > I doubt we can get more certainty than this: > > > https://www.postgresql.org/docs/devel/creating-cluster.html#CREATING-CLUSTER-NFS > > Best, > Karsten
Implementation of gtrgm_out for gevel
Hello. I want use gevel (http://www.sai.msu.su/~megera/wiki/Gevel) for investigation of pg_trgm gist. But for gist_print i need implement gtrgm_out for pg_trgm gist node. And i have a problem here. - My version: PostgreSQL 9.6.6 on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 5.4.0-6ubuntu1~16.04.5) 5.4.0 20160609, 64-bit - Function: Datum gtrgm_out(PG_FUNCTION_ARGS) { GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0); /* I think entry is pointer to bad memory */ char *result; char buf[1024]; if (entry->leafkey) /* Why leafkey is always true and has strange value? */ { /* This is from gtrgm_compress */ /* text *val = DatumGetTextPP(entry->key); <-- Segfault here */ /* result = strndup(VARDATA_ANY(val), VARSIZE_ANY_EXHDR(val)); */ sprintf(buf, "leafkey %c", entry->leafkey); } else { sprintf(buf, "leafkey %c", entry->leafkey); } result = pstrdup(buf); PG_RETURN_CSTRING(result); } - Call gtrgm_out: select * from gist_print('test1_trgm') as t(level int, valid bool, a gtrgm); level | valid | a ---+---+-- 1 | t | leafkey \x7F 2 | t | leafkey \x7F ... 2 | t | leafkey v ... 2 | t | leafkey \x7F ... 2 | t | leafkey v 2 | t | leafkey \x7F ... Can anyone give me some advice? Thanks.
Re: Implementation of gtrgm_out for gevel
On 23.11.2017 21:58, Tom Lane wrote: > Dmitry Lazurkin writes: >> Datum >> gtrgm_out(PG_FUNCTION_ARGS) >> { >> GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0); /* I think entry >> is pointer to bad memory */ > The argument is TRGM *, I think ... certainly not GISTENTRY *. > > regards, tom lane Hmm. I will try to debug gist_print.
Re: Implementation of gtrgm_out for gevel
On 11/23/2017 09:58 PM, Tom Lane wrote: > Dmitry Lazurkin writes: >> Datum >> gtrgm_out(PG_FUNCTION_ARGS) >> { >> GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0); /* I think entry >> is pointer to bad memory */ > The argument is TRGM *, I think ... certainly not GISTENTRY *. > > regards, tom lane You are right. Thank you.