mirror of
https://github.com/postgres/postgres.git
synced 2025-11-07 19:06:32 +03:00
Long ago we briefly had an "autocommit" GUC that turned server-side autocommit on and off. That behavior was removed in 7.4 after concluding that it broke far too much client-side logic, and making clients cope with both behaviors was impractical. But the GUC variable was left behind, so as not to break any client code that might be trying to read its value. Enough time has now passed that we should remove the GUC completely. Whatever vestigial backwards-compatibility benefit it had is outweighed by the risk of confusion for newbies who assume it ought to do something, as per a recent complaint from Wolfgang Wilhelm. In passing, adjust what seemed to me a rather confusing documentation reference to libpq's autocommit behavior. libpq as such knows nothing about autocommit, so psql is probably what was meant.
79 lines
2.5 KiB
Bash
Executable File
79 lines
2.5 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
## currently, this script makes a lot of assumptions:
|
|
## in postgresql.conf.sample:
|
|
## 1) the valid config settings may be preceded by a '#', but NOT '# '
|
|
## (we use this to skip comments)
|
|
## 2) the valid config settings will be followed immediately by ' ='
|
|
## (at least one space preceding the '=')
|
|
## in guc.c:
|
|
## 3) the options have PGC_ on the same line as the option
|
|
## 4) the options have '{' on the same line as the option
|
|
|
|
## Problems
|
|
## 1) Don't know what to do with TRANSACTION ISOLATION LEVEL
|
|
|
|
## if an option is valid but shows up in only one file (guc.c but not
|
|
## postgresql.conf.sample), it should be listed here so that it
|
|
## can be ignored
|
|
INTENTIONALLY_NOT_INCLUDED="debug_deadlocks \
|
|
is_superuser lc_collate lc_ctype lc_messages lc_monetary lc_numeric lc_time \
|
|
pre_auth_delay role seed server_encoding server_version server_version_int \
|
|
session_authorization trace_lock_oidmin trace_lock_table trace_locks trace_lwlocks \
|
|
trace_notify trace_userlocks transaction_isolation transaction_read_only \
|
|
zero_damaged_pages"
|
|
|
|
### What options are listed in postgresql.conf.sample, but don't appear
|
|
### in guc.c?
|
|
|
|
# grab everything that looks like a setting and convert it to lower case
|
|
SETTINGS=`grep ' =' postgresql.conf.sample |
|
|
grep -v '^# ' | # strip comments
|
|
sed -e 's/^#//' |
|
|
awk '{print $1}'`
|
|
|
|
SETTINGS=`echo "$SETTINGS" | tr 'A-Z' 'a-z'`
|
|
|
|
for i in $SETTINGS ; do
|
|
hidden=0
|
|
## it sure would be nice to replace this with an sql "not in" statement
|
|
## it doesn't seem to make sense to have things in .sample and not in guc.c
|
|
# for hidethis in $INTENTIONALLY_NOT_INCLUDED ; do
|
|
# if [ "$hidethis" = "$i" ] ; then
|
|
# hidden=1
|
|
# fi
|
|
# done
|
|
if [ "$hidden" -eq 0 ] ; then
|
|
grep -i '"'$i'"' guc.c > /dev/null
|
|
if [ $? -ne 0 ] ; then
|
|
echo "$i seems to be missing from guc.c";
|
|
fi;
|
|
fi
|
|
done
|
|
|
|
### What options are listed in guc.c, but don't appear
|
|
### in postgresql.conf.sample?
|
|
|
|
# grab everything that looks like a setting and convert it to lower case
|
|
|
|
SETTINGS=`grep '{.* PGC_' guc.c | awk '{print $1}' | \
|
|
sed -e 's/{//g' -e 's/"//g' -e 's/,//'`
|
|
|
|
SETTINGS=`echo "$SETTINGS" | tr 'A-Z' 'a-z'`
|
|
|
|
for i in $SETTINGS ; do
|
|
hidden=0
|
|
## it sure would be nice to replace this with an sql "not in" statement
|
|
for hidethis in $INTENTIONALLY_NOT_INCLUDED ; do
|
|
if [ "$hidethis" = "$i" ] ; then
|
|
hidden=1
|
|
fi
|
|
done
|
|
if [ "$hidden" -eq 0 ] ; then
|
|
grep -i '#'$i' ' postgresql.conf.sample > /dev/null
|
|
if [ $? -ne 0 ] ; then
|
|
echo "$i seems to be missing from postgresql.conf.sample";
|
|
fi
|
|
fi
|
|
done
|