2

I did some changes of pgsql source code, such as adding a new system catalog. Then I wanted to init the database by using initdb -D PG_DATA_PATH. But it came to this problem:

The files belonging to this database system will be owned by user "pguser".
This user must also own the server process.

The database cluster will be initialized with locale "en_US.UTF-8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".

Data page checksums are disabled.

creating directory /home/pguser/Desktop/postgres/data ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting default time zone ... America/Los_Angeles
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... Segmentation fault (core dumped)
child process exited with exit code 139
initdb: removing data directory "/home/pguser/Desktop/postgres/data"

There is NO errors or warnings when I executed make and make install. Also, I used gdb to backtrace the execution of initdb:

Program received signal SIGPIPE, Broken pipe.
0x00007ffff7475224 in __GI___libc_write (fd=4, buf=0x555555838910, nbytes=71)
    at ../sysdeps/unix/sysv/linux/write.c:27
27  ../sysdeps/unix/sysv/linux/write.c: No such file or directory.
(gdb) bt
#0  0x00007ffff7475224 in __GI___libc_write (fd=4, buf=0x555555838910, 
    nbytes=71) at ../sysdeps/unix/sysv/linux/write.c:27
#1  0x00007ffff73f028d in _IO_new_file_write (f=0x555555828040, 
    data=0x555555838910, n=71) at fileops.c:1203
#2  0x00007ffff73f2021 in new_do_write (to_do=71, 
    data=0x555555838910 " * string literal (including a function body!) or a multiline comment.\n\n\n\nguage';\nge';\n;\n;\nrministic, collencoding, collcollate, collctype)VALUES (pg_nextoid('pg_catalog.pg_collation', 'oid', 'pg_cata"..., 
    fp=0x555555828040) at fileops.c:457
#3  _IO_new_do_write (fp=0x555555828040, 
    data=0x555555838910 " * string literal (including a function body!) or a multiline comment.\n\n\n\nguage';\nge';\n;\n;\nrministic, collencoding, collcollate, collctype)VALUES (pg_nextoid('pg_catalog.pg_collation', 'oid', 'pg_cata"..., 
    to_do=71) at fileops.c:433
#4  0x00007ffff73ef858 in _IO_new_file_sync (fp=0x555555828040)
    at fileops.c:813
#5  0x00007ffff73e395d in __GI__IO_fflush (fp=0x555555828040) at iofflush.c:40
#6  0x000055555555d5ec in setup_dictionary (cmdfd=0x555555828040)
    at initdb.c:1675
#7  0x000055555555f838 in initialize_data_directory () at initdb.c:2909
#8  0x0000555555560234 in main (argc=3, argv=0x7fffffffded8) at initdb.c:3228

What's the potential cause of this fault???? SIGPIPE signal??? I'm hoping for someone to help me!!!Thank you.

Charlie_Y
  • 23
  • 3

1 Answers1

0

You have a core dump from the wrong process.

initdb starts the PostgreSQL server in stand-alone mode and pipes the catalog contents to it. Now something in the data you are writing is bad, and the stand alone backend exits. Then initdb gets a SIGPIPE if it writes to the pipe and crashes.

You want to debug the PostgreSQL server, not initdb.

Laurenz Albe
  • 209,280
  • 17
  • 206
  • 263
  • Thank you for your remind. So you mean maybe system catalog's metadata I'm writing is bad? Or potentially anything else is bad? BTW, how to debug PostgreSQL server when I'm running 'initdb'? A little confused about it. – Charlie_Y Mar 18 '21 at 15:25
  • I'd say that you feed PostgreSQL something bad. Build a delay into PostgreSQL startup and attach to the standalone backend. – Laurenz Albe Mar 18 '21 at 16:01
  • Solved it! It's bug from backend process. Thank you anyway! – Charlie_Y Mar 19 '21 at 15:26