May 17, 2026, 11:40 PM
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
These scripts should work on all versions of PostgreSQL up to 9.4
|
||||
Most have options to specify host and port.
|
||||
./<script> -h shows all options
|
||||
|
||||
cache_hit_ratio.sh -> Shows the cache hit ration for all databases
|
||||
cancel_all_queries.sh -> Terminates all queries in progress
|
||||
check_postgresql_log.sh -> greps the postgres log file for ERROR, WARNING and ref's to pg_hba. You will probably need to edit and adjust the directory path and suffix for your cluster.
|
||||
columns_of_type_x -> Shows all tables and columns with specific character type
|
||||
connect_count.sh -> Shows connection count for each database
|
||||
current_locks.sh -> Shows status for all current locks
|
||||
current_queries.sh -> Shows information on all current queries, will loop continuously unless -x option is specified. -s option specifies sleeptime, default is 5 secs. -i will ignore <IDLE> queries
|
||||
database_sizes.sh -> shows size of all databases
|
||||
filename_tables.sh -> shows physical directory, filename, owner & size for all tables in specified database
|
||||
|
||||
flip_database_connect.sh -> Flips state of datallowconn for database
|
||||
|
||||
get_trans_min_cnt.sh -> shows transaction count per minute for cluster
|
||||
groups_users.sh -> shows all groups & members in cluster and if group or user is a superuser
|
||||
index_bloat.sh -> shows index ration to table size for all indexes of all or specified table in database.
|
||||
index_comments.sh -> shows comments on all or specified index for database
|
||||
|
||||
logins_block.sh -> prevents all non-superusers from future logins. MUST be run as user postgres
|
||||
logins_allow.sh -> re-allows login access to all normal users. MUST be run as user postgres
|
||||
|
||||
pg_backup.sh -> generic backup script for postgres database. You will need to edit and adjust for your needs.
|
||||
pg_runtime.sh -> shows startup and continuous runtime for the cluster
|
||||
pg_stat_all_indexes.sh -> shows stats and status of all indexes or just for specified table
|
||||
pg_stat_all_tables.sh -> shows stats for all or specified table
|
||||
pg_vacuum_time.sh -> Shows total time to vacuum a database
|
||||
remove_ctrl.sh -> removes control characters from a script. Useful if script was created on a windows PC and then copied to Linux
|
||||
role_members.sh -> Shows roles and all members
|
||||
slony_status.sh -> shows status and lag time of slony cluster. Should be run on master node.
|
||||
table_column_stats.sh -> shows stats for all columns of specified table
|
||||
table_comments.sh -> shows comments for all or specified table
|
||||
table_dependents.sh -> shows foreign key constraints for all or specified table
|
||||
table_in_functions.sh -> shows all functions that reference specified table
|
||||
table_in_trogger.sh -> shows all triggerss that reference specified table
|
||||
tables_and_owners.sh -> shows owners and permits on all tables
|
||||
tables-filenames.sh -> shows physical directory, filename, owner & size for all tables in specified database
|
||||
table_sizes.sh -> shows tuple count and size for all or specified table
|
||||
tablespace_use.sh -> shows tablespace used by all or specified table/index
|
||||
tables_with_column_name.sh -> shows all tables that have a column name LIKE specified column name
|
||||
tables_with_FKS.sh -> shows all tables taht have a foreign key constraint
|
||||
tables_with_no_public_grants.sh -> shows tables that have no public grants (restricted table)
|
||||
triggers_and_constraints.sh -> shows all triggers and called functions for all or specified table
|
||||
user_table_access_detail.sh -> shows table access for specified user
|
||||
user_table_access.sh -> shows permit and position in permit for specified user
|
||||
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
#!/bin/bash
|
||||
# Shows cache hit ratio for all databases
|
||||
|
||||
USER=""
|
||||
PORT=""
|
||||
DBNAME="postgres"
|
||||
|
||||
usage() {
|
||||
echo "Usage: $0 [-d <dbname> -h <host> -U <user> -p <port>]"
|
||||
exit 1
|
||||
}
|
||||
|
||||
while getopts "d:h:p:uU:" OPT;
|
||||
do case "${OPT}" in
|
||||
d) DBNAME=$OPTARG
|
||||
;;
|
||||
h) HOST="-h $OPTARG"
|
||||
;;
|
||||
p) PORT="-p $OPTARG"
|
||||
;;
|
||||
U) USER="-U $OPTARG"
|
||||
;;
|
||||
u) usage
|
||||
;;
|
||||
[?]) usage
|
||||
esac;
|
||||
done
|
||||
|
||||
if [ "$DBNAME" = "" ]
|
||||
then
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
psql $USER $HOST $PORT $DBNAME <<_EOF_
|
||||
SELECT pg_stat_database.datname,
|
||||
pg_stat_database.blks_read,
|
||||
pg_stat_database.blks_hit,
|
||||
round((pg_stat_database.blks_hit::double precision
|
||||
/ (pg_stat_database.blks_read
|
||||
+ pg_stat_database.blks_hit
|
||||
+1)::double precision * 100::double precision)::numeric, 2) AS cachehitratio
|
||||
FROM pg_stat_database
|
||||
WHERE pg_stat_database.datname !~ '^(template(0|1)|postgres)$'::text
|
||||
ORDER BY round((pg_stat_database.blks_hit::double precision
|
||||
/ (pg_stat_database.blks_read
|
||||
+ pg_stat_database.blks_hit
|
||||
+ 1)::double precision * 100::double precision)::numeric, 2) DESC;
|
||||
_EOF_
|
||||
@@ -0,0 +1,52 @@
|
||||
#!/bin/bash
|
||||
|
||||
usage() {
|
||||
echo "Usage: $0 [-h <host> -p <port>]"
|
||||
echo "-p will default to 5432"
|
||||
exit 1
|
||||
}
|
||||
|
||||
while getopts "h:p:" OPT;
|
||||
do case "${OPT}" in
|
||||
h) HOST="-h $OPTARG"
|
||||
;;
|
||||
p) PORT="-p $OPTARG"
|
||||
;;
|
||||
u) usage
|
||||
;;
|
||||
[?]) usage
|
||||
esac;
|
||||
done
|
||||
|
||||
getver()
|
||||
{
|
||||
VER=$(psql -t $HOST $PORT -U postgres <<_QRYVER_
|
||||
SELECT substring(version() from 12 for 1);
|
||||
_QRYVER_
|
||||
)
|
||||
}
|
||||
|
||||
cancel_pids()
|
||||
{
|
||||
psql -t $HOST $PORT -U postgres <<_QRYVER_
|
||||
--SELECT pg_cancel_backend($PID)
|
||||
SELECT pg_terminate_backend($PID)
|
||||
FROM pg_stat_activity WHERE pg_backend_pid() <> $PID);
|
||||
_QRYVER_
|
||||
|
||||
}
|
||||
|
||||
##### MAIN #####
|
||||
|
||||
getveri
|
||||
declare -i VER
|
||||
if [ "$VER" -lt 9 ]
|
||||
then
|
||||
PID="procpid"
|
||||
else
|
||||
PID="pid"
|
||||
fi
|
||||
cancel_pids
|
||||
|
||||
exit 0;
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
#!/bin/bash
|
||||
|
||||
# if arguments > 0, set count option
|
||||
|
||||
if [ $# -eq 0 ]
|
||||
then
|
||||
cntflg='-c'
|
||||
else
|
||||
cntflg=''
|
||||
fi
|
||||
|
||||
set $(date '+%m%d')
|
||||
MMDD=$1
|
||||
|
||||
#set $(date)
|
||||
## if day number less than 10, prefix a '0'
|
||||
#if [ $3 -le 9 ]
|
||||
# then
|
||||
# DD=0${3}
|
||||
# else
|
||||
# DD=${3}
|
||||
#fi
|
||||
|
||||
set $(date +%m)
|
||||
MM=${1}
|
||||
logdir=/var/log/postgresql/
|
||||
|
||||
echo "Current error log is: ${logdir}postgresql.${MMDD}"
|
||||
echo
|
||||
echo -n "ERROR: "
|
||||
grep ${cntflg} -i ERROR ${logdir}postgresql.${MMDD}
|
||||
echo -n "WARNING: "
|
||||
grep ${cntflg} -i WARNING ${logdir}postgresql.${MMDD}
|
||||
echo -n "pg_hba: "
|
||||
grep ${cntflg} -i pg_hba ${logdir}postgresql.${MMDD}
|
||||
@@ -0,0 +1,77 @@
|
||||
#!/bin/bash
|
||||
# Shows tables and columns that are of type specified
|
||||
|
||||
PORT=""
|
||||
USER=""
|
||||
COLTYPE="?"
|
||||
|
||||
usage() {
|
||||
echo "Usage: $0 -d <dbname> -t <coltype> [-h <host> -U <user> -p <port>]"
|
||||
exit 1
|
||||
}
|
||||
|
||||
while getopts "d:t:h:p:uU:" OPT;
|
||||
do case "${OPT}" in
|
||||
d) DBNAME=$OPTARG
|
||||
;;
|
||||
h) HOST="-h $OPTARG"
|
||||
;;
|
||||
p) PORT="-p $OPTARG"
|
||||
;;
|
||||
t) COLTYPE="$OPTARG"
|
||||
;;
|
||||
U) USER="-U $OPTARG"
|
||||
;;
|
||||
u) usage
|
||||
;;
|
||||
[?]) usage
|
||||
esac;
|
||||
done
|
||||
|
||||
if [ "$DBNAME" = "" ]
|
||||
then
|
||||
DBNAME="postgres"
|
||||
fi
|
||||
|
||||
choose_qry ()
|
||||
{
|
||||
|
||||
if [ "$COLTYPE" = "?" ]
|
||||
then
|
||||
echo "Usage: $0 -d <dbname> -t <coltype> [-h <host> -U <user> -p <port>]"
|
||||
echo
|
||||
echo "Available Data Types"
|
||||
QRY="SELECT DISTINCT (c.data_type)
|
||||
FROM information_schema.columns c
|
||||
ORDER BY c.data_type;"
|
||||
else
|
||||
QRY="SELECT quote_ident(c.table_schema) as schema,
|
||||
quote_ident(c.table_name) as table,
|
||||
quote_ident(c.column_name) as column,
|
||||
c.data_type as type,
|
||||
case when c.data_type LIKE '%char%'
|
||||
then COALESCE(character_maximum_length::text, 'N/A')
|
||||
when c.data_type LIKE '%numeric%'
|
||||
then '(' || c.numeric_precision::text || ', ' || c.numeric_scale::text || ')'
|
||||
when c.data_type LIKE '%int%'
|
||||
then c.numeric_precision::text
|
||||
else COALESCE(character_maximum_length::text, 'N/A')
|
||||
end as size
|
||||
FROM information_schema.columns c
|
||||
WHERE c.table_schema NOT LIKE 'pg_%'
|
||||
AND c.table_schema NOT LIKE 'information%'
|
||||
AND c.table_name NOT LIKE 'sql_%'
|
||||
AND c.data_type LIKE '%$COLTYPE%'
|
||||
AND c.is_updatable = 'YES'
|
||||
ORDER BY 1, 2, 3;"
|
||||
fi
|
||||
|
||||
psql $HOST $USER $PORT $DBNAME <<_CODE_
|
||||
|
||||
${QRY}
|
||||
|
||||
_CODE_
|
||||
|
||||
}
|
||||
|
||||
choose_qry
|
||||
@@ -0,0 +1,131 @@
|
||||
#!/bin/bash
|
||||
|
||||
DBNAME="postgres"
|
||||
USER="-U postgres"
|
||||
PORT="-p 5432"
|
||||
|
||||
usage() {
|
||||
echo "Usage: $0 [-d <dbname> -h <host> -U <user> -p <port> u]"
|
||||
exit 1
|
||||
}
|
||||
|
||||
while getopts "d:h:p:uU:" OPT;
|
||||
do case "${OPT}" in
|
||||
d) DBNAME=$OPTARG
|
||||
;;
|
||||
h) HOST="-h $OPTARG"
|
||||
;;
|
||||
p) PORT="-p $OPTARG"
|
||||
;;
|
||||
U) USER="-U $OPTARG"
|
||||
;;
|
||||
u) usage
|
||||
;;
|
||||
[?]) usage
|
||||
esac;
|
||||
done
|
||||
|
||||
|
||||
set $(date '+%m%d')
|
||||
MMDD=$1
|
||||
|
||||
LOGDIR='/var/log/postgresql'
|
||||
|
||||
getver()
|
||||
{
|
||||
VER=$(psql $HOST $PORT $USER $DBNAME <<_QUERY_
|
||||
SELECT version();
|
||||
|
||||
_QUERY_
|
||||
|
||||
)
|
||||
|
||||
#VER=$(cat ${PGDATA}/PG_VERSION)
|
||||
#use next line only if PGDATA has version in path
|
||||
#VER=$(echo $PGDATA | cut -d / -f 5)
|
||||
}
|
||||
|
||||
clear
|
||||
|
||||
getver
|
||||
echo "PostgreSQL Version is $VER"
|
||||
|
||||
connect_cnts() {
|
||||
DBLIST=$(psql -q -t $HOST $PORT $USER $DBNAME <<_QUERY_
|
||||
|
||||
SELECT d.datname
|
||||
FROM pg_database d
|
||||
WHERE datallowconn = TRUE
|
||||
AND datistemplate = FALSE
|
||||
ORDER BY 1;
|
||||
|
||||
_QUERY_
|
||||
|
||||
)
|
||||
|
||||
|
||||
}
|
||||
|
||||
get_cnt() {
|
||||
|
||||
|
||||
CNT=$(psql -t $PORT $USER $DBNAME <<_QUERY_
|
||||
|
||||
/*
|
||||
SELECT count(*)
|
||||
FROM pg_stat_activity
|
||||
WHERE datname = '$DB';
|
||||
*/
|
||||
SELECT usename,
|
||||
count(*)
|
||||
FROM pg_stat_activity
|
||||
WHERE datname = '$DB'
|
||||
GROUP BY usename;
|
||||
|
||||
|
||||
_QUERY_
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
all_count() {
|
||||
CNT=$(psql -t $PORT $USER $DBNAME <<_QUERY_
|
||||
|
||||
SELECT count(*)
|
||||
FROM pg_stat_activity;
|
||||
|
||||
_QUERY_
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
###############################################################
|
||||
# MAIN #
|
||||
###############################################################
|
||||
|
||||
connect_cnts
|
||||
|
||||
for DB in $DBLIST;
|
||||
do
|
||||
echo -n "$DB "
|
||||
get_cnt
|
||||
# grep -E -c "$DB.*connection auth" #LOGDIR/postgresql.${MMDD}
|
||||
echo -e "\t$CNT"
|
||||
done
|
||||
|
||||
all_count
|
||||
echo
|
||||
echo -e "TOTAL \t\t$CNT"
|
||||
|
||||
#exit 0
|
||||
|
||||
#echo "$(hostname -f) CONNECTION COUNTS"
|
||||
#echo "Current log file is: $logdir/postgresql.$MMDD"
|
||||
#echo
|
||||
|
||||
#for DB in $DBLIST
|
||||
# do
|
||||
# echo -n "$DB: "
|
||||
# grep 'connection authorized' $LOGDIR/postgresql.${MMDD} | grep -c "$DB"
|
||||
#done
|
||||
#exit 0
|
||||
@@ -0,0 +1,109 @@
|
||||
#!/bin/bash
|
||||
|
||||
USER="-U postgres"
|
||||
PORT="-p 5432"
|
||||
|
||||
usage() {
|
||||
echo "Usage: $0 -d <dbname> [-h <host> -U <user> -p <port>]"
|
||||
exit 1
|
||||
}
|
||||
|
||||
while getopts "d:h:p:uU:" OPT;
|
||||
do case "${OPT}" in
|
||||
d) DBNAME=$OPTARG
|
||||
;;
|
||||
h) HOST="-h $OPTARG"
|
||||
;;
|
||||
p) PORT="-p $OPTARG"
|
||||
;;
|
||||
U) USER="-U $OPTARG"
|
||||
;;
|
||||
u) usage
|
||||
;;
|
||||
[?]) usage
|
||||
esac;
|
||||
done
|
||||
|
||||
if [ "$DBNAME" = "" ]
|
||||
then
|
||||
DBNAME="postgres"
|
||||
fi
|
||||
|
||||
#Column names changed from procpid $ current_query to pid & query from 9.2 up
|
||||
gettstver()
|
||||
{
|
||||
TSTVER=$(psql -q -t $HOST $PORT $USER $DBNAME <<_QRY_
|
||||
SELECT CASE WHEN SUBSTRING(version() FROM 12 FOR 3) < '9.2'
|
||||
THEN 'procpid'
|
||||
ELSE 'pid'
|
||||
END;
|
||||
_QRY_
|
||||
|
||||
)
|
||||
|
||||
TSTVER=${TSTVER:1:7}
|
||||
|
||||
}
|
||||
|
||||
gettstver
|
||||
|
||||
if [ "${TSTVER}" = "procpid" ]
|
||||
then
|
||||
COL="procpid"
|
||||
QRY="current_query"
|
||||
else
|
||||
COL="pid"
|
||||
QRY="query"
|
||||
fi
|
||||
|
||||
|
||||
getver()
|
||||
{
|
||||
VER=$(psql -t $HOST $PORT $USER $DBNAME <<_QRYVER_
|
||||
SELECT version();
|
||||
_QRYVER_
|
||||
)
|
||||
}
|
||||
|
||||
getver
|
||||
VER=$(echo $VER | cut -c -16)
|
||||
echo "Version is $VER"
|
||||
|
||||
current_locks() {
|
||||
LCKLIST=$(psql -q $HOST $PORT $USER $DBNAME <<_QUERY_
|
||||
|
||||
SELECT l.database,
|
||||
d.datname,
|
||||
l.relation,
|
||||
n.nspname,
|
||||
c.relname,
|
||||
l.pid,
|
||||
a.usename,
|
||||
l.locktype,
|
||||
l.mode,
|
||||
l.granted,
|
||||
l.tuple
|
||||
FROM pg_locks l
|
||||
JOIN pg_class c ON (c.oid = l.relation)
|
||||
JOIN pg_database d ON (CASE WHEN l.database = 0 THEN d.oid = 0 ELSE d.oid = l.database END)
|
||||
JOIN pg_namespace n ON (n.oid = c.relnamespace)
|
||||
JOIN pg_stat_activity a ON (a.$COL = l.pid)
|
||||
ORDER BY l.database,
|
||||
l.relation,
|
||||
l.pid;
|
||||
|
||||
_QUERY_
|
||||
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
if [ "$DBNAME" = "" ]
|
||||
then
|
||||
usage
|
||||
fi
|
||||
|
||||
current_locks
|
||||
echo "${LCKLIST}"
|
||||
|
||||
exit 0
|
||||
@@ -0,0 +1,127 @@
|
||||
#!/bin/bash
|
||||
|
||||
DBNAME="postgres"
|
||||
USER="-U postgres"
|
||||
PORT="-p 5432"
|
||||
SLEEPTIME=5
|
||||
CANCEL="F"
|
||||
NOIDLE=""
|
||||
|
||||
usage() {
|
||||
echo "Usage: $0 [-s <sleeptime> -d <dbname> -h <host> -U <user> -p <port> -x -i]"
|
||||
echo "-x will exit after 1 iteration"
|
||||
echo "-i will exclude <IDLE> queries"
|
||||
exit 1
|
||||
}
|
||||
|
||||
while getopts "d:s:h:p:uU:xi" OPT;
|
||||
do case "${OPT}" in
|
||||
d) DBNAME=$OPTARG
|
||||
;;
|
||||
s) SLEEPTIME=$OPTARG
|
||||
;;
|
||||
h) HOST="-h $OPTARG"
|
||||
;;
|
||||
p) PORT="-p $OPTARG"
|
||||
;;
|
||||
U) USER="-U $OPTARG"
|
||||
;;
|
||||
x) CANCEL="T"
|
||||
;;
|
||||
i) NOIDLE="AND current_query <> '<IDLE>'"
|
||||
;;
|
||||
u) usage
|
||||
;;
|
||||
[?]) usage
|
||||
esac;
|
||||
done
|
||||
|
||||
if [ "$DBNAME" = "" ]
|
||||
then
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
getver() {
|
||||
VER=$(psql -q -t $HOST $PORT $USER $DBNAME <<_VER_
|
||||
|
||||
SELECT SUBSTR(version(), 1, 16);
|
||||
|
||||
_VER_
|
||||
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
#Column names changed from procpid $ current_query to pid & query from 9.2 up
|
||||
gettstver()
|
||||
{
|
||||
TSTVER=$(psql -q -t $HOST $PORT $USER $DBNAME <<_QRY_
|
||||
SELECT CASE WHEN SUBSTRING(version() FROM 12 FOR 3) < '9.2'
|
||||
THEN 'procpid'
|
||||
ELSE 'pid'
|
||||
END;
|
||||
_QRY_
|
||||
|
||||
)
|
||||
|
||||
TSTVER=${TSTVER:1:7}
|
||||
|
||||
}
|
||||
|
||||
gettstver
|
||||
|
||||
if [ "${TSTVER}" = "procpid" ]
|
||||
then
|
||||
COL="procpid"
|
||||
QRY="current_query"
|
||||
else
|
||||
COL="pid"
|
||||
QRY="query"
|
||||
fi
|
||||
|
||||
getver
|
||||
echo "$VER"
|
||||
sleep 2
|
||||
|
||||
current_qry() {
|
||||
QRYLIST=$(psql -q $HOST $PORT $USER $DBNAME <<_QUERY_
|
||||
|
||||
SELECT datname,
|
||||
$COL as pid,
|
||||
-- procpid as pid,
|
||||
client_addr,
|
||||
usename as user,
|
||||
-- regexp_replace(current_query, ' (..)', ' ', 'g') as query,
|
||||
regexp_replace($QRY, ' (..)', ' ', 'g') as query,
|
||||
waiting,
|
||||
query_start,
|
||||
clock_timestamp() - query_start as duration
|
||||
FROM pg_stat_activity
|
||||
--WHERE procpid != pg_backend_pid()
|
||||
WHERE $COL != pg_backend_pid()
|
||||
$NOIDLE
|
||||
ORDER BY datname,
|
||||
query_start;
|
||||
|
||||
_QUERY_
|
||||
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
#### MAIN ####
|
||||
|
||||
while [ 1 -ge 0 ]
|
||||
do
|
||||
clear
|
||||
current_qry
|
||||
echo "${QRYLIST}"
|
||||
if [ "$CANCEL" = "T" ]
|
||||
then
|
||||
exit 0
|
||||
fi
|
||||
echo "Sleeping $SLEEPTIME"
|
||||
sleep $SLEEPTIME
|
||||
done
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
#!/bin/bash
|
||||
# Reports sizes for all or selected database
|
||||
|
||||
PORT=""
|
||||
USER=""
|
||||
DBNAME="%"
|
||||
usage() {
|
||||
echo "Usage: $0 [-d <dbname> -U <user> -p <port>]"
|
||||
exit 1
|
||||
}
|
||||
|
||||
while getopts "d:p:uU:" OPT;
|
||||
do case "${OPT}" in
|
||||
d) DBNAME=$OPTARG
|
||||
;;
|
||||
p) PORT="-p $OPTARG"
|
||||
;;
|
||||
U) USER="-U $OPTARG"
|
||||
;;
|
||||
u) usage
|
||||
;;
|
||||
[?]) usage
|
||||
esac;
|
||||
done
|
||||
|
||||
if [ "$DBNAME" = "" ]
|
||||
then
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
psql $PORT $USER postgres <<_EOF_
|
||||
SELECT datname,
|
||||
rolname as owner,
|
||||
pg_size_pretty(pg_database_size(datname) )as size_pretty,
|
||||
pg_database_size(datname) as size,
|
||||
(SELECT pg_size_pretty (SUM( pg_database_size(datname))::bigint)
|
||||
FROM pg_database) AS total,
|
||||
((pg_database_size(datname) / (SELECT SUM( pg_database_size(datname))
|
||||
FROM pg_database) ) * 100)::numeric(6,3) AS pct
|
||||
FROM pg_database d
|
||||
JOIN pg_authid a ON a.oid = datdba
|
||||
WHERE datname LIKE '%$DBNAME%'
|
||||
ORDER BY datname;
|
||||
_EOF_
|
||||
@@ -0,0 +1,55 @@
|
||||
#!/bin/bash
|
||||
|
||||
# SHOWS TABLES AND SIZES FOR ALL TABLES
|
||||
# SHOULD BE RUN AS a SUPERUSER
|
||||
|
||||
HOST=""
|
||||
PORT=""
|
||||
USER=""
|
||||
|
||||
usage() {
|
||||
echo "Usage: $0 -d <dbname> [-h <host> -p <port> -U <user>]"
|
||||
exit 1
|
||||
}
|
||||
|
||||
while getopts "d:h:p:U:u" OPT;
|
||||
do case "${OPT}" in
|
||||
d) DBNAME=$OPTARG
|
||||
;;
|
||||
p) PORT="-p $OPTARG"
|
||||
;;
|
||||
h) HOST="-h $OPTARG"
|
||||
;;
|
||||
U) USER="-U $OPTARG"
|
||||
;;
|
||||
u) usage
|
||||
;;
|
||||
[?]) usage
|
||||
esac;
|
||||
done
|
||||
|
||||
if [ "$DBNAME" = "" ]
|
||||
then
|
||||
usage
|
||||
fi
|
||||
|
||||
psql $HOST $PORT $USER $DBNAME <<_CODE_
|
||||
|
||||
SELECT d.oid as directory,
|
||||
c.relfilenode as filename,
|
||||
n.nspname as schema,
|
||||
c.relname as table,
|
||||
a.rolname as owner,
|
||||
pg_size_pretty(pg_relation_size(quote_ident(n.nspname) || '.' || quote_ident(c.relname))) as size
|
||||
FROM pg_class c
|
||||
JOIN pg_namespace n ON (n.oid = c.relnamespace)
|
||||
JOIN pg_authid a ON ( a.oid = c.relowner ),
|
||||
pg_database d
|
||||
WHERE d.datname = current_database()
|
||||
AND relname NOT LIKE 'pg_%'
|
||||
AND relname NOT LIKE 'information%'
|
||||
AND relname NOT LIKE 'sql_%'
|
||||
AND relkind = 'r'
|
||||
ORDER BY relfilenode;
|
||||
|
||||
_CODE_
|
||||
@@ -0,0 +1,63 @@
|
||||
#!/bin/bash
|
||||
# Disables or Enables connections to specified database
|
||||
|
||||
PORT=""
|
||||
USER=""
|
||||
|
||||
usage() {
|
||||
echo "Usage: $0 -d <dbname> [-p <port> -U <user>]"
|
||||
echo Database name to disable/enable is required
|
||||
exit 1
|
||||
}
|
||||
|
||||
while getopts "d:p:U:u" OPT;
|
||||
do case "${OPT}" in
|
||||
d) DBNAME=$OPTARG
|
||||
;;
|
||||
p) PORT="-p $OPTARG"
|
||||
;;
|
||||
U) USER="-U $OPTARG"
|
||||
;;
|
||||
u) usage
|
||||
;;
|
||||
[?]) usage
|
||||
esac;
|
||||
done
|
||||
|
||||
|
||||
if [ "$DBNAME" = "" ]
|
||||
then
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ $DBNAME == "postgres" ]
|
||||
then
|
||||
echo Disable of postgres is prohibited
|
||||
exit
|
||||
fi
|
||||
|
||||
echo changing $DBNAME
|
||||
|
||||
psql $PORT $USER -v ON_ERROR_STOP=on postgres <<_EOF_
|
||||
SELECT datname, datallowconn
|
||||
FROM pg_database
|
||||
WHERE datname = '$DBNAME' ;
|
||||
|
||||
UPDATE pg_database
|
||||
SET datallowconn = CASE
|
||||
WHEN datallowconn = TRUE THEN
|
||||
FALSE
|
||||
ELSE
|
||||
TRUE
|
||||
END
|
||||
WHERE datname = '$DBNAME' ;
|
||||
|
||||
SELECT datname, datallowconn
|
||||
FROM pg_database
|
||||
WHERE datname = '$DBNAME' ;
|
||||
|
||||
\echo Connect status for $DBNAME has been reversed
|
||||
|
||||
_EOF_
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
#!/bin/bash
|
||||
# Counts transaction per minute
|
||||
# for postgresql server
|
||||
# Note: transactions are actual / not potential
|
||||
|
||||
PORT=""
|
||||
USER=""
|
||||
DBNAME="postgres"
|
||||
|
||||
usage() {
|
||||
echo "Usage: $0 [-d <dbname> -p <port> -U <user>]"
|
||||
exit 1
|
||||
}
|
||||
|
||||
while getopts "d:p:U:u" OPT;
|
||||
do case "${OPT}" in
|
||||
d) DBNAME="$OPTARG"
|
||||
;;
|
||||
p) PORT="-p $OPTARG"
|
||||
;;
|
||||
U) USER="-U $OPTARG"
|
||||
;;
|
||||
u) usage
|
||||
;;
|
||||
[?]) usage
|
||||
esac;
|
||||
done
|
||||
|
||||
get_procnum() {
|
||||
PROCNUM=$(psql $PORT -q -t $USER $DBNAME <<_QUERY_
|
||||
SELECT SUM(xact_commit + xact_rollback)
|
||||
FROM pg_stat_database;
|
||||
|
||||
_QUERY_
|
||||
|
||||
)
|
||||
}
|
||||
|
||||
get_procnum
|
||||
echo "$PROCNUM"
|
||||
FIRST_CNT=$PROCNUM
|
||||
sleep 60
|
||||
get_procnum
|
||||
LAST_CNT=$PROCNUM
|
||||
echo "$PROCNUM"
|
||||
(( TOT_QRY = $LAST_CNT - $FIRST_CNT ))
|
||||
echo "Total queries = $TOT_QRY"
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
#!/bin/bash
|
||||
|
||||
psql -U postgres postgres <<_EOF_
|
||||
SELECT g.rolname as group,
|
||||
u.rolname as user,
|
||||
r.admin_option,
|
||||
CASE WHEN g.rolsuper = TRUE
|
||||
THEN 'SUPERUSER'
|
||||
ELSE 'f'
|
||||
END as g_super,
|
||||
CASE WHEN u.rolsuper = TRUE
|
||||
THEN 'SUPERUSER'
|
||||
ELSE 'f'
|
||||
END as u_super
|
||||
FROM pg_auth_members r
|
||||
JOIN pg_authid g ON (r.roleid = g.oid)
|
||||
JOIN pg_authid u ON (r.member = u.oid)
|
||||
ORDER BY 1;
|
||||
_EOF_
|
||||
@@ -0,0 +1,56 @@
|
||||
#!/bin/bash
|
||||
|
||||
# SHOWS TABLES AND SIZES FOR ALL TABLES
|
||||
# SHOULD BE RUN AS SUPERUSER
|
||||
|
||||
PORT=""
|
||||
USER=""
|
||||
TBL=""
|
||||
|
||||
usage() {
|
||||
echo "Usage: $0 -d <dbname> [-t <table> -p <port> -U <user>]"
|
||||
exit 1
|
||||
}
|
||||
|
||||
while getopts "d:p:t:U:u" OPT;
|
||||
do case "${OPT}" in
|
||||
d) DBNAME=$OPTARG
|
||||
;;
|
||||
p) PORT="-p $OPTARG"
|
||||
;;
|
||||
t) TBL="$OPTARG"
|
||||
;;
|
||||
U) USER="-U $OPTARG"
|
||||
;;
|
||||
u) usage
|
||||
;;
|
||||
[?]) usage
|
||||
esac;
|
||||
done
|
||||
|
||||
|
||||
if [ "$DBNAME" = "" ]
|
||||
then
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
psql $PORT $USER $DBNAME <<_CODE_
|
||||
|
||||
SELECT quote_ident(N.nspname),
|
||||
quote_ident(T.relname) AS "table",
|
||||
quote_ident(C.relname) AS idx_name,
|
||||
round(100 * pg_relation_size(indexrelid) / pg_relation_size(indrelid) ) / 100 AS "index_ratio %",
|
||||
pg_size_pretty(pg_relation_size(indexrelid) ) AS index_size,
|
||||
pg_size_pretty(pg_relation_size(indrelid) ) AS table_size_size
|
||||
FROM pg_index I
|
||||
LEFT JOIN pg_class C ON (c.oid = I.indexrelid)
|
||||
LEFT JOIN pg_class T ON (T.oid = I.indrelid)
|
||||
LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
|
||||
WHERE nspname NOT IN ('pg_catalog', 'information_schema', 'pg_toast')
|
||||
AND c.relkind = 'i'
|
||||
AND pg_relation_size(indrelid) > 0
|
||||
AND C.relname LIKE '%$TBL%'
|
||||
ORDER BY 4 DESC, 2;
|
||||
|
||||
_CODE_
|
||||
@@ -0,0 +1,75 @@
|
||||
#!/bin/bash
|
||||
|
||||
#Shows commnets on all or selected index
|
||||
|
||||
USER=""
|
||||
PORT=""
|
||||
|
||||
usage() {
|
||||
echo "Usage: $0 -d <dbname> [-i <index> -U <user> -p <port>]"
|
||||
exit 1
|
||||
}
|
||||
|
||||
while getopts "d:i:p:uU:" OPT;
|
||||
do case "${OPT}" in
|
||||
d) DBNAME=$OPTARG
|
||||
;;
|
||||
i) IDX=$OPTARG
|
||||
;;
|
||||
p) PORT="-p $OPTARG"
|
||||
;;
|
||||
U) USER="-U $OPTARG"
|
||||
;;
|
||||
u) usage
|
||||
;;
|
||||
[?]) usage
|
||||
esac;
|
||||
done
|
||||
|
||||
if [ "$DBNAME" = "" ]
|
||||
then
|
||||
usage
|
||||
fi
|
||||
|
||||
getver()
|
||||
{
|
||||
VER=$(psql $PORT -t $USER $DBNAME <<_QRYVER_
|
||||
SELECT version();
|
||||
_QRYVER_
|
||||
)
|
||||
}
|
||||
getver
|
||||
|
||||
VER=$(echo $VER | cut -c -16)
|
||||
echo "Version is $VER"
|
||||
|
||||
QRY="SELECT quote_ident(n.nspname) as schema,
|
||||
quote_ident(c.relname),
|
||||
d.description as comment
|
||||
FROM pg_class c
|
||||
LEFT JOIN pg_description d ON (d.objoid = c.oid)
|
||||
JOIN pg_namespace n ON (n.oid = c.relnamespace)
|
||||
WHERE n.nspname NOT LIKE 'information%'
|
||||
AND relname NOT LIKE 'pg_%'
|
||||
AND relname NOT LIKE 'information%'
|
||||
AND relname NOT LIKE 'sql_%'
|
||||
AND relname LIKE '%$IDX%'
|
||||
AND relkind = 'i'
|
||||
AND d.description IS NOT NULL
|
||||
ORDER BY 2;"
|
||||
|
||||
current_stats() {
|
||||
STATLIST=$(psql $PORT -q $USER $DBNAME <<_QUERY_
|
||||
|
||||
${QRY}
|
||||
|
||||
_QUERY_
|
||||
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
current_stats
|
||||
echo "${STATLIST}"
|
||||
|
||||
exit 0
|
||||
@@ -0,0 +1,78 @@
|
||||
#!/bin/bash
|
||||
|
||||
DBNAME="postgres"
|
||||
USER="-U postgres"
|
||||
PORT="-p 5432"
|
||||
|
||||
usage() {
|
||||
echo "Usage: $0 [-d <dbname> -h <host> -U <user> -p <port> u]"
|
||||
exit 1
|
||||
}
|
||||
|
||||
while getopts "d:h:p:uU:" OPT;
|
||||
do case "${OPT}" in
|
||||
d) DBNAME=$OPTARG
|
||||
;;
|
||||
h) HOST="-h $OPTARG"
|
||||
;;
|
||||
p) PORT="-p $OPTARG"
|
||||
;;
|
||||
U) USER="-U $OPTARG"
|
||||
;;
|
||||
u) usage
|
||||
;;
|
||||
[?]) usage
|
||||
esac;
|
||||
done
|
||||
|
||||
|
||||
allow_logins()
|
||||
{
|
||||
|
||||
CNT=$(psql $HOST $PORT $USER $DBNAME <<_QUERY_
|
||||
|
||||
UPDATE pg_authid au
|
||||
SET rolcanlogin = TRUE
|
||||
FROM pg_lockout lo
|
||||
WHERE au.rolname = lo.rolname;
|
||||
|
||||
_QUERY_
|
||||
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
current_user()
|
||||
{
|
||||
|
||||
CUSER=$(psql -t $HOST $PORT $USER $DBNAME <<_QUERY_
|
||||
|
||||
SELECT TRIM(BOTH FROM current_user);
|
||||
|
||||
_QUERY_
|
||||
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
###############################################################
|
||||
# MAIN #
|
||||
###############################################################
|
||||
|
||||
current_user
|
||||
|
||||
if [ $CUSER != "postgres" ]
|
||||
then
|
||||
echo "You must be postgres to execute this script."
|
||||
echo "Aborting."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
allow_logins
|
||||
|
||||
echo "Users allowed to login = $CNT"
|
||||
|
||||
exit 0
|
||||
|
||||
@@ -0,0 +1,90 @@
|
||||
#!/bin/bash
|
||||
|
||||
DBNAME="postgres"
|
||||
USER="-U postgres"
|
||||
PORT="-p 5432"
|
||||
|
||||
usage() {
|
||||
echo "Usage: $0 [-d <dbname> -U <user> -p <port> u]"
|
||||
exit 1
|
||||
}
|
||||
|
||||
while getopts "d:p:uU:" OPT;
|
||||
do case "${OPT}" in
|
||||
d) DBNAME=$OPTARG
|
||||
;;
|
||||
p) PORT="-p $OPTARG"
|
||||
;;
|
||||
U) USER="-U $OPTARG"
|
||||
;;
|
||||
u) usage
|
||||
;;
|
||||
[?]) usage
|
||||
esac;
|
||||
done
|
||||
|
||||
|
||||
lockout()
|
||||
{
|
||||
|
||||
CNT=$(psql $PORT $USER $DBNAME <<_QUERY_
|
||||
|
||||
DROP TABLE IF EXISTS pg_lockout;
|
||||
CREATE TABLE pg_lockout
|
||||
AS SELECT rolname,
|
||||
rolsuper,
|
||||
rolcanlogin
|
||||
FROM pg_authid
|
||||
WHERE rolsuper IS FALSE;
|
||||
|
||||
ALTER TABLE pg_lockout
|
||||
ADD CONSTRAINT pg_lockout_pkey PRIMARY KEY (rolname);
|
||||
|
||||
UPDATE pg_authid au
|
||||
SET rolcanlogin = FALSE
|
||||
FROM pg_lockout lo
|
||||
WHERE lo.rolcanlogin = TRUE
|
||||
AND au.rolname = lo.rolname;
|
||||
|
||||
_QUERY_
|
||||
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
current_user()
|
||||
{
|
||||
|
||||
CUSER=$(psql -t $PORT $USER $DBNAME <<_QUERY_
|
||||
|
||||
SELECT TRIM(BOTH FROM current_user);
|
||||
|
||||
_QUERY_
|
||||
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
|
||||
###############################################################
|
||||
# MAIN #
|
||||
###############################################################
|
||||
|
||||
current_user
|
||||
|
||||
echo "current user is $CUSER"
|
||||
|
||||
if [ $CUSER != "postgres" ]
|
||||
then
|
||||
echo "You must be postgres to execute this script."
|
||||
echo "Aborting."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
lockout
|
||||
|
||||
echo "Users locked out = $CNT"
|
||||
|
||||
exit 0
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
BACKFILE=pgbackup.`date +%C%y%m%d%H%M`
|
||||
pg_dump -f /home/pgsql/backup/$BACKFILE -F c postgres
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
#!/bin/bash
|
||||
# Show start and runtime for postgresql server
|
||||
|
||||
DBNAME="postgres"
|
||||
PORT=""
|
||||
USER=""
|
||||
|
||||
usage() {
|
||||
echo "Usage: $0 [-d <dbname> -p <port> -U <user>]"
|
||||
exit 1
|
||||
}
|
||||
|
||||
while getopts "d:p:U:u" OPT;
|
||||
do case "${OPT}" in
|
||||
d) DBNAME="$OPTARG"
|
||||
;;
|
||||
p) PORT="-p $OPTARG"
|
||||
;;
|
||||
U) USER="-U $OPTARG"
|
||||
;;
|
||||
u) usage
|
||||
;;
|
||||
[?]) usage
|
||||
esac;
|
||||
done
|
||||
|
||||
getver()
|
||||
{
|
||||
VER=$(psql -t $PORT $USER $DBNAME <<_QRYVER_
|
||||
SELECT version();
|
||||
_QRYVER_
|
||||
)
|
||||
}
|
||||
|
||||
getver
|
||||
VER=$(echo $VER | cut -c -16)
|
||||
echo "Version is $VER"
|
||||
|
||||
show_runtime() {
|
||||
RUNTIME=$(psql -q $PORT $USER $DBNAME <<_QUERY_
|
||||
|
||||
SELECT pg_postmaster_start_time() as pg_start,
|
||||
current_timestamp - pg_postmaster_start_time() as runtime;
|
||||
|
||||
_QUERY_
|
||||
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
show_runtime
|
||||
echo "${RUNTIME}"
|
||||
|
||||
exit 0
|
||||
@@ -0,0 +1,140 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Shows statistics for all indexes on all selected table
|
||||
|
||||
PORT=""
|
||||
USER=""
|
||||
TBL="%"
|
||||
COLS=""
|
||||
|
||||
usage() {
|
||||
echo "Usage: $0 -d <dbname> [-U <user> -p <port> -t <table> -s ]"
|
||||
echo "dbname REQUIRED"
|
||||
echo "-s will show columns used in index"
|
||||
exit 1
|
||||
}
|
||||
|
||||
getver()
|
||||
{
|
||||
VER=$(psql -t $PORT $USER $DBNAME <<_QRYVER_
|
||||
SELECT version();
|
||||
_QRYVER_
|
||||
)
|
||||
}
|
||||
|
||||
set_qry_cols() {
|
||||
|
||||
QRY="SELECT n.nspname as schema,
|
||||
i.relname as table,
|
||||
i.indexrelname as index,
|
||||
i.idx_scan,
|
||||
i.idx_tup_read,
|
||||
i.idx_tup_fetch,
|
||||
CASE WHEN idx.indisprimary
|
||||
THEN 'pkey'
|
||||
WHEN idx.indisunique
|
||||
THEN 'uidx'
|
||||
ELSE 'idx'
|
||||
END AS type,
|
||||
pg_get_indexdef(idx.indexrelid, 1, FALSE) as idxcol1,
|
||||
pg_get_indexdef(idx.indexrelid, 2, FALSE) as idxcol2,
|
||||
pg_get_indexdef(idx.indexrelid, 3, FALSE) as idxcol3,
|
||||
pg_get_indexdef(idx.indexrelid, 4, FALSE) as idxcol4,
|
||||
CASE WHEN idx.indisvalid
|
||||
THEN 'valid'
|
||||
ELSE 'INVALID'
|
||||
END as status,
|
||||
pg_relation_size( quote_ident(n.nspname) || '.' || quote_ident(i.relname) ) as size_in_bytes,
|
||||
pg_size_pretty(pg_relation_size(quote_ident(n.nspname)|| '.' || quote_ident(i.relname) )) as size
|
||||
FROM pg_stat_all_indexes i
|
||||
JOIN pg_class c ON (c.oid = i.relid)
|
||||
JOIN pg_namespace n ON (n.oid = c.relnamespace)
|
||||
JOIN pg_index idx ON (idx.indexrelid = i.indexrelid )
|
||||
WHERE i.relname LIKE '%$TBL%'
|
||||
AND n.nspname NOT LIKE 'pg_%'
|
||||
ORDER BY 1, 2, 3;"
|
||||
|
||||
}
|
||||
|
||||
set_qry_nocols() {
|
||||
|
||||
QRY="SELECT n.nspname as schema,
|
||||
i.relname as table,
|
||||
i.indexrelname as index,
|
||||
i.idx_scan,
|
||||
i.idx_tup_read,
|
||||
i.idx_tup_fetch,
|
||||
CASE WHEN idx.indisprimary
|
||||
THEN 'pkey'
|
||||
WHEN idx.indisunique
|
||||
THEN 'uidx'
|
||||
ELSE 'idx'
|
||||
END AS type,
|
||||
CASE WHEN idx.indisvalid
|
||||
THEN 'valid'
|
||||
ELSE 'INVALID'
|
||||
END as status,
|
||||
pg_relation_size(quote_ident(n.nspname) || '.' || quote_ident(i.relname) ) as size_in_bytes
|
||||
FROM pg_stat_all_indexes i
|
||||
JOIN pg_class c ON (c.oid = i.relid)
|
||||
JOIN pg_namespace n ON (n.oid = c.relnamespace)
|
||||
JOIN pg_index idx ON (idx.indexrelid = i.indexrelid )
|
||||
WHERE i.relname LIKE '%$TBL%'
|
||||
AND n.nspname NOT LIKE 'pg_%'
|
||||
ORDER BY 1, 2, 3;"
|
||||
|
||||
}
|
||||
|
||||
current_stats() {
|
||||
STATLIST=$(psql -q -U postgres $DBNAME <<_QUERY_
|
||||
|
||||
$QRY
|
||||
|
||||
_QUERY_
|
||||
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
###########################################################
|
||||
# MAIN #
|
||||
###########################################################
|
||||
|
||||
while getopts "d:p:st:uU:" OPT;
|
||||
do case "${OPT}" in
|
||||
d) DBNAME=$OPTARG
|
||||
;;
|
||||
p) PORT="-p $OPTARG"
|
||||
;;
|
||||
s) COLS="TRUE"
|
||||
;;
|
||||
t) TBL="$OPTARG"
|
||||
;;
|
||||
U) USER="-U $OPTARG"
|
||||
;;
|
||||
u) usage
|
||||
;;
|
||||
[?]) usage
|
||||
esac;
|
||||
done
|
||||
|
||||
if [ "$DBNAME" = "" ]
|
||||
then
|
||||
usage
|
||||
fi
|
||||
|
||||
getver
|
||||
VER=$(echo $VER | cut -c -16)
|
||||
echo "Version is $VER"
|
||||
|
||||
if [ "$COLS" = "TRUE" ]
|
||||
then
|
||||
set_qry_cols
|
||||
else
|
||||
set_qry_nocols
|
||||
fi
|
||||
|
||||
current_stats
|
||||
echo "${STATLIST}"
|
||||
|
||||
exit 0
|
||||
@@ -0,0 +1,100 @@
|
||||
#!/bin/bash
|
||||
# Reports statistics for all tables
|
||||
|
||||
PORT=""
|
||||
USER=""
|
||||
TBL=""
|
||||
|
||||
usage() {
|
||||
echo "Usage: $0 -d <dbname> [-t <table> -U <user> -p <port>]"
|
||||
exit 1
|
||||
}
|
||||
|
||||
while getopts "d:p:t:uU:" OPT;
|
||||
do case "${OPT}" in
|
||||
d) DBNAME=$OPTARG
|
||||
;;
|
||||
p) PORT="-p $OPTARG"
|
||||
;;
|
||||
t) TBL=$OPTARG
|
||||
;;
|
||||
U) USER="-U $OPTARG"
|
||||
;;
|
||||
u) usage
|
||||
;;
|
||||
[?]) usage
|
||||
esac;
|
||||
done
|
||||
|
||||
if [ "$DBNAME" = "" ]
|
||||
then
|
||||
usage
|
||||
fi
|
||||
|
||||
getver()
|
||||
{
|
||||
VER=$(psql -t $PORT $USER $DBNAME <<_QRYVER_
|
||||
SELECT version();
|
||||
_QRYVER_
|
||||
)
|
||||
}
|
||||
getver
|
||||
|
||||
VER=$(echo $VER | cut -c -16)
|
||||
echo "Version is $VER"
|
||||
|
||||
if [ "${VER:11:3}" \< "8.3" ]
|
||||
then
|
||||
QRY="SELECT n.nspname as schema,
|
||||
s.relname as table,
|
||||
c.reltuples::bigint,
|
||||
n_tup_ins,
|
||||
n_tup_upd,
|
||||
n_tup_del,
|
||||
date_trunc('second', last_vacuum) as last_vacuum,
|
||||
date_trunc('second', last_autovacuum) as last_autovacuum,
|
||||
date_trunc('second', last_analyze) as last_analyze,
|
||||
date_trunc('second', last_autoanalyze) as last_autoanalyze
|
||||
FROM pg_stat_all_tables s
|
||||
JOIN pg_class c ON c.oid = s.relid
|
||||
JOIN pg_namespace n ON (n.oid = c.relnamespace)
|
||||
WHERE s.relname NOT LIKE 'pg_%'
|
||||
AND s.relname NOT LIKE 'sql_%'
|
||||
AND s.relname LIKE '%$TBL%'
|
||||
ORDER by 1, 2;"
|
||||
else
|
||||
QRY="SELECT n.nspname as schema,
|
||||
s.relname as table,
|
||||
c.reltuples::bigint,
|
||||
n_live_tup,
|
||||
n_tup_ins,
|
||||
n_tup_upd,
|
||||
n_tup_del,
|
||||
date_trunc('second', last_vacuum) as last_vacuum,
|
||||
date_trunc('second', last_autovacuum) as last_autovacuum,
|
||||
date_trunc('second', last_analyze) as last_analyze,
|
||||
date_trunc('second', last_autoanalyze) as last_autoanalyze
|
||||
FROM pg_stat_all_tables s
|
||||
JOIN pg_class c ON c.oid = s.relid
|
||||
JOIN pg_namespace n ON (n.oid = c.relnamespace)
|
||||
WHERE s.relname NOT LIKE 'pg_%'
|
||||
AND s.relname NOT LIKE 'sql_%'
|
||||
AND s.relname LIKE '%$TBL%'
|
||||
ORDER by 1, 2;"
|
||||
fi
|
||||
|
||||
current_stats() {
|
||||
STATLIST=$(psql -q $PORT $USER $DBNAME <<_QUERY_
|
||||
|
||||
${QRY}
|
||||
|
||||
_QUERY_
|
||||
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
current_stats
|
||||
echo "${STATLIST}"
|
||||
|
||||
exit 0
|
||||
@@ -0,0 +1,66 @@
|
||||
#!/bin/bash
|
||||
# Shows vacuum time for all or selected table.
|
||||
|
||||
PORT=""
|
||||
USER=""
|
||||
TBL=""
|
||||
|
||||
usage() {
|
||||
echo "Usage: $0 -d <dbname> [-t <table> -p <port> -U <user>]"
|
||||
exit 1
|
||||
}
|
||||
|
||||
while getopts "d:p:t:U:u" OPT;
|
||||
do case "${OPT}" in
|
||||
d) DBNAME=$OPTARG
|
||||
;;
|
||||
p) PORT="-p $OPTARG"
|
||||
;;
|
||||
U) USER="-U $OPTARG"
|
||||
;;
|
||||
t) TBL="$OPTARG"
|
||||
;;
|
||||
u) usage
|
||||
;;
|
||||
[?]) usage
|
||||
esac;
|
||||
done
|
||||
|
||||
|
||||
if [ "$DBNAME" = "" ]
|
||||
then
|
||||
usage
|
||||
fi
|
||||
|
||||
getver()
|
||||
{
|
||||
VER=$(psql $PORT -t $USER $DBNAME <<_QRYVER_
|
||||
SELECT version();
|
||||
_QRYVER_
|
||||
)
|
||||
}
|
||||
getver
|
||||
|
||||
VER=$(echo $VER | cut -c -16)
|
||||
echo "Version is $VER"
|
||||
|
||||
vacuum_time() {
|
||||
TIMEINFO=$(psql -q $PORT $USER $DBNAME <<_QUERY_
|
||||
|
||||
SELECT max(last_vacuum) - min(last_vacuum) as vacuum_time
|
||||
FROM pg_stat_all_tables s
|
||||
WHERE s.relname NOT LIKE 'pg_%'
|
||||
AND s.relname NOT LIKE 'sql_%'
|
||||
AND s.relname LIKE '%$TBL%'
|
||||
ORDER by 1;
|
||||
|
||||
_QUERY_
|
||||
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
vacuum_time
|
||||
echo "${TIMEINFO}"
|
||||
|
||||
exit 0
|
||||
@@ -0,0 +1,24 @@
|
||||
#!/bin/bash
|
||||
|
||||
#!/bin/bash
|
||||
|
||||
OLDFILE=$1
|
||||
|
||||
usage() {
|
||||
echo "Usage: $0 oldfile"
|
||||
exit 1
|
||||
}
|
||||
|
||||
if [ -z "$OLDFILE" ]
|
||||
then
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
OLDFILE=$1
|
||||
NEWFILE=x$1
|
||||
|
||||
col -bp < $OLDFILE >> $NEWFILE
|
||||
chmod +x $NEWFILE
|
||||
rm $OLDFILE
|
||||
mv $NEWFILE $OLDFILE
|
||||
@@ -0,0 +1,64 @@
|
||||
#!/bin/bash
|
||||
#Shows roles and members
|
||||
|
||||
PORT=""
|
||||
USER="-U postgres"
|
||||
DBNAME="postgres"
|
||||
|
||||
usage() {
|
||||
echo "Usage: $0 [-d <dbname> -U <user> -p <port>]"
|
||||
exit 1
|
||||
}
|
||||
|
||||
while getopts "d:p:uU:" OPT;
|
||||
do case "${OPT}" in
|
||||
d) DBNAME=$OPTARG
|
||||
;;
|
||||
p) PORT="-p $OPTARG"
|
||||
;;
|
||||
U) USER="-U $OPTARG"
|
||||
;;
|
||||
u) usage
|
||||
;;
|
||||
[?]) usage
|
||||
esac;
|
||||
done
|
||||
|
||||
getver()
|
||||
{
|
||||
VER=$(psql -t $PORT $USER $DBNAME <<_QRYVER_
|
||||
SELECT version();
|
||||
_QRYVER_
|
||||
)
|
||||
}
|
||||
|
||||
getver
|
||||
VER=$(echo $VER | cut -c -16)
|
||||
echo "Version is $VER"
|
||||
|
||||
show_members() {
|
||||
MEMBERS=$(psql -q $PORT $USER $DBNAME <<_QUERY_
|
||||
|
||||
SELECT a.rolname as role,
|
||||
u.rolname as member,
|
||||
CASE
|
||||
WHEN m.admin_option THEN
|
||||
'YES'
|
||||
ELSE
|
||||
'no'
|
||||
END as admin
|
||||
FROM pg_auth_members m
|
||||
JOIN pg_authid a ON (a.oid = m.roleid)
|
||||
JOIN pg_authid u ON (u.oid = m.member)
|
||||
ORDER BY 1, 2
|
||||
|
||||
_QUERY_
|
||||
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
show_members
|
||||
echo "${MEMBERS}"
|
||||
|
||||
exit 0
|
||||
@@ -0,0 +1,55 @@
|
||||
#!/bin/bash
|
||||
|
||||
PORT=""
|
||||
|
||||
usage() {
|
||||
echo "Usage: $0 [-p <port>]"
|
||||
exit 1
|
||||
}
|
||||
|
||||
while getopts "p:u" OPT;
|
||||
do case "${OPT}" in
|
||||
p) PORT="-p $OPTARG"
|
||||
;;
|
||||
u) usage
|
||||
;;
|
||||
[?]) usage
|
||||
esac;
|
||||
done
|
||||
|
||||
|
||||
getver()
|
||||
{
|
||||
VER=$(psql $PORT -t -U postgres postgres <<_QRYVER_
|
||||
SELECT version();
|
||||
_QRYVER_
|
||||
)
|
||||
}
|
||||
getver
|
||||
|
||||
VER=$(echo $VER | cut -c -16)
|
||||
echo "Version is $VER"
|
||||
|
||||
slony_status() {
|
||||
STATUS=$(psql $PORT -q <<_QUERY_
|
||||
|
||||
BEGIN;
|
||||
|
||||
SELECT st_origin as org,
|
||||
st_last_event as last_event,
|
||||
st_lag_num_events as lag_events,
|
||||
st_lag_time
|
||||
FROM _slony.sl_status;
|
||||
|
||||
COMMIT;
|
||||
|
||||
_QUERY_
|
||||
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
slony_status
|
||||
echo "${STATUS}"
|
||||
|
||||
exit 0
|
||||
@@ -0,0 +1,83 @@
|
||||
#!/bin/bash
|
||||
# Reports statistics for all tables
|
||||
|
||||
HOST=""
|
||||
PORT=""
|
||||
USER=""
|
||||
TBL=""
|
||||
|
||||
usage() {
|
||||
echo "Usage: $0 -d <dbname> -t <table> [-h <host> -U <user> -p <port>]"
|
||||
exit 1
|
||||
}
|
||||
|
||||
while getopts "d:h:p:t:U:u" OPT;
|
||||
do case "${OPT}" in
|
||||
d) DBNAME=$OPTARG
|
||||
;;
|
||||
h) HOST="-h $OPTARG"
|
||||
;;
|
||||
p) PORT="-p $OPTARG"
|
||||
;;
|
||||
t) TBL=$OPTARG
|
||||
;;
|
||||
U) USER="-U $OPTARG"
|
||||
;;
|
||||
u) usage
|
||||
;;
|
||||
[?]) usage
|
||||
esac;
|
||||
done
|
||||
|
||||
if [ "$DBNAME" = "" ]
|
||||
then
|
||||
DBNAME="playmaker"
|
||||
fi
|
||||
|
||||
if [ "$TBL" = "" ]
|
||||
then
|
||||
usage
|
||||
fi
|
||||
|
||||
getver()
|
||||
{
|
||||
VER=$(psql -t $PORT $HOST $USER $DBNAME <<_QRYVER_
|
||||
SELECT version();
|
||||
_QRYVER_
|
||||
)
|
||||
}
|
||||
|
||||
getver
|
||||
|
||||
current_stats() {
|
||||
STATLIST=$(psql -q $HOST $PORT $USER $DBNAME <<_QUERY_
|
||||
|
||||
SELECT schemaname,
|
||||
tablename,
|
||||
attname As colname,
|
||||
n_distinct,
|
||||
array_to_string(most_common_vals, E'\n') AS common_vals,
|
||||
array_to_string(most_common_freqs, E'\n') As dist_freq
|
||||
FROM pg_stats
|
||||
WHERE tablename = '$TBL'
|
||||
ORDER BY schemaname,
|
||||
tablename,
|
||||
attname;
|
||||
|
||||
_QUERY_
|
||||
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
##### MAIN #####
|
||||
echo "HOST=$HOST"
|
||||
echo "PORT=$PORT"
|
||||
echo "USER=$USER"
|
||||
echo "TBL=$TBL"
|
||||
echo "DBNAME=$DBNAME"
|
||||
|
||||
current_stats
|
||||
echo "${STATLIST}"
|
||||
|
||||
exit 0
|
||||
@@ -0,0 +1,101 @@
|
||||
#!/bin/bash
|
||||
# Shows comments for all or specified table
|
||||
|
||||
USER=""
|
||||
PORT=""
|
||||
TBL=""
|
||||
|
||||
usage() {
|
||||
echo "Usage: $0 -d <dbname> [-t <table> -U <user> -p <port>]"
|
||||
exit 1
|
||||
}
|
||||
|
||||
while getopts "d:t:p:uU:" OPT;
|
||||
do case "${OPT}" in
|
||||
d) DBNAME=$OPTARG
|
||||
;;
|
||||
p) PORT="-p $OPTARG"
|
||||
;;
|
||||
t) TBL=$OPTARG
|
||||
;;
|
||||
U) USER="-U $OPTARG"
|
||||
;;
|
||||
u) usage
|
||||
;;
|
||||
[?]) usage
|
||||
esac;
|
||||
done
|
||||
|
||||
if [ "$DBNAME" = "" ]
|
||||
then
|
||||
usage
|
||||
fi
|
||||
|
||||
getver()
|
||||
{
|
||||
VER=$(psql $PORT -t $USER $DBNAME <<_QRYVER_
|
||||
SELECT version();
|
||||
_QRYVER_
|
||||
)
|
||||
}
|
||||
getver
|
||||
|
||||
VER=$(echo $VER | cut -c -16)
|
||||
echo "Version is $VER"
|
||||
|
||||
QRY="SELECT DISTINCT ON (c.relname)
|
||||
n.nspname as schema,
|
||||
c.relname,
|
||||
a.rolname as owner,
|
||||
0 as col_seq,
|
||||
'' as column,
|
||||
d.description as comment
|
||||
FROM pg_class c
|
||||
LEFT JOIN pg_attribute col ON (col.attrelid = c.oid)
|
||||
LEFT JOIN pg_description d ON (d.objoid = col.attrelid AND d.objsubid = 0)
|
||||
JOIN pg_namespace n ON (n.oid = c.relnamespace)
|
||||
JOIN pg_authid a ON ( a.OID = c.relowner )
|
||||
WHERE n.nspname NOT LIKE 'information%'
|
||||
AND relname NOT LIKE 'pg_%'
|
||||
AND relname NOT LIKE 'information%'
|
||||
AND relname NOT LIKE 'sql_%'
|
||||
AND relname LIKE '%$TBL%'
|
||||
AND relkind = 'r'
|
||||
-- AND d.description IS NOT NULL
|
||||
UNION
|
||||
SELECT n.nspname as schema,
|
||||
c.relname,
|
||||
'' as owner,
|
||||
col.attnum as col_seq,
|
||||
col.attname as column,
|
||||
d.description
|
||||
FROM pg_class c
|
||||
JOIN pg_attribute col ON (col.attrelid = c.oid)
|
||||
LEFT JOIN pg_description d ON (d.objoid = col.attrelid AND d.objsubid = col.attnum)
|
||||
JOIN pg_namespace n ON (n.oid = c.relnamespace)
|
||||
JOIN pg_authid a ON ( a.OID = c.relowner )
|
||||
WHERE n.nspname NOT LIKE 'information%'
|
||||
AND relname NOT LIKE 'pg_%'
|
||||
AND relname NOT LIKE 'information%'
|
||||
AND relname NOT LIKE 'sql_%'
|
||||
AND relname LIKE '%$TBL%'
|
||||
AND relkind = 'r'
|
||||
-- AND d.description IS NOT NULL
|
||||
AND col.attnum >= 0
|
||||
ORDER BY 1, 2, 4;"
|
||||
|
||||
current_stats() {
|
||||
STATLIST=$(psql $USER $PORT -q $DBNAME <<_QUERY_
|
||||
|
||||
${QRY}
|
||||
|
||||
_QUERY_
|
||||
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
current_stats
|
||||
echo "${STATLIST}"
|
||||
|
||||
exit 0
|
||||
@@ -0,0 +1,70 @@
|
||||
#!/bin/bash
|
||||
|
||||
USER=""
|
||||
PORT=""
|
||||
TBL=""
|
||||
|
||||
usage() {
|
||||
echo "Usage: $0 -d <dbname> [-t <table> -p <port> -U <user>]"
|
||||
exit 1
|
||||
}
|
||||
|
||||
while getopts "d:p:t:U:u" OPT;
|
||||
do case "${OPT}" in
|
||||
d) DBNAME=$OPTARG
|
||||
;;
|
||||
p) PORT="-p $OPTARG"
|
||||
;;
|
||||
t) TBL=$OPTARG
|
||||
;;
|
||||
U) USER="-U $OPTARG"
|
||||
;;
|
||||
u) usage
|
||||
;;
|
||||
[?]) usage
|
||||
esac;
|
||||
done
|
||||
|
||||
|
||||
if [ "$DBNAME" = "" ]
|
||||
then
|
||||
usage
|
||||
fi
|
||||
|
||||
getver()
|
||||
{
|
||||
VER=$(psql $PORT -t $USER $DBNAME <<_QRYVER_
|
||||
SELECT version();
|
||||
_QRYVER_
|
||||
)
|
||||
}
|
||||
getver
|
||||
|
||||
VER=$(echo $VER | cut -c -16)
|
||||
echo "Version is $VER"
|
||||
|
||||
get_dependents() {
|
||||
DEPLIST=$(psql $PORT -q $USER $DBNAME <<_QUERY_
|
||||
|
||||
SELECT n.nspname as schema,
|
||||
pa.relname as parent,
|
||||
ch.relname as dependent,
|
||||
cn.conname as constraint_name
|
||||
FROM pg_constraint cn
|
||||
JOIN pg_class pa ON (pa.oid = cn.confrelid)
|
||||
JOIN pg_class ch ON (ch.oid = cn.conrelid)
|
||||
JOIN pg_namespace n ON (n.oid = pa.relnamespace)
|
||||
WHERE pa.relname LIKE '%$TBL%'
|
||||
AND contype = 'f'
|
||||
ORDER BY 1, 2, 3;
|
||||
|
||||
_QUERY_
|
||||
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
get_dependents
|
||||
echo "${DEPLIST}"
|
||||
|
||||
exit 0
|
||||
@@ -0,0 +1,58 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Shows functions that specified table occurs in
|
||||
|
||||
USER=""
|
||||
PORT=""
|
||||
|
||||
usage() {
|
||||
echo "Usage: $0 -d <dbname> -t <table> [-U <user> -p <port>]"
|
||||
exit 1
|
||||
}
|
||||
|
||||
while getopts "d:t:p:uU:" OPT;
|
||||
do case "${OPT}" in
|
||||
d) DBNAME=$OPTARG
|
||||
;;
|
||||
t) TBL=$OPTARG
|
||||
;;
|
||||
p) PORT="-p $OPTARG"
|
||||
;;
|
||||
U) USER="-U $OPTARG"
|
||||
;;
|
||||
u) usage
|
||||
;;
|
||||
[?]) usage
|
||||
esac;
|
||||
done
|
||||
|
||||
if [ "$DBNAME" = "" ]
|
||||
then
|
||||
DBNAME="enf"
|
||||
fi
|
||||
|
||||
if [ "$TBL" = "" ]
|
||||
then
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "$TBL"
|
||||
|
||||
psql $USER $PORT $DBNAME <<_CODE_
|
||||
SELECT p.proname,
|
||||
CASE WHEN p.proretset = TRUE
|
||||
THEN 'SET OF '
|
||||
ELSE ''
|
||||
END ||
|
||||
UPPER( (SELECT typname
|
||||
FROM pg_type
|
||||
WHERE oid = p.prorettype) ) AS return_type,
|
||||
proargnames as parameters
|
||||
FROM pg_proc p
|
||||
WHERE prosrc LIKE '%$TBL%'
|
||||
ORDER BY p.proname;
|
||||
|
||||
_CODE_
|
||||
|
||||
exit 0
|
||||
@@ -0,0 +1,53 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Shows trigger functions that specified table occurs in
|
||||
|
||||
USER=""
|
||||
PORT=""
|
||||
|
||||
usage() {
|
||||
echo "Usage: $0 -d <dbname> -t <table> [-U <user> -p <port>]"
|
||||
exit 1
|
||||
}
|
||||
|
||||
while getopts "d:t:p:uU:" OPT;
|
||||
do case "${OPT}" in
|
||||
d) DBNAME=$OPTARG
|
||||
;;
|
||||
t) TBL=$OPTARG
|
||||
;;
|
||||
p) PORT="-p $OPTARG"
|
||||
;;
|
||||
U) USER="-U $OPTARG"
|
||||
;;
|
||||
u) usage
|
||||
;;
|
||||
[?]) usage
|
||||
esac;
|
||||
done
|
||||
|
||||
if [ "$DBNAME" = "" ]
|
||||
then
|
||||
DBNAME="enf"
|
||||
fi
|
||||
|
||||
if [ "$TBL" = "" ]
|
||||
then
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "$TBL"
|
||||
|
||||
psql $USER $PORT $DBNAME <<_CODE_
|
||||
SELECT c.relname,
|
||||
t.tgname,
|
||||
p.proname
|
||||
FROM pg_proc p
|
||||
JOIN pg_trigger t ON (t.tgfoid = p.oid)
|
||||
JOIN pg_class c ON (c.oid = t.tgrelid)
|
||||
WHERE prosrc LIKE ('%$TBL%')
|
||||
ORDER BY c.relname;
|
||||
_CODE_
|
||||
|
||||
exit 0
|
||||
@@ -0,0 +1,69 @@
|
||||
#!/bin/bash
|
||||
|
||||
# SHOWS TABLES AND SIZES FOR ALL TABLES
|
||||
# SHOULD BE RUN AS SUPERUSER
|
||||
|
||||
PORT=""
|
||||
USER=""
|
||||
TBL=""
|
||||
|
||||
usage() {
|
||||
echo "Usage: $0 -d <dbname> [-t <table> -p <port> -U <user>]"
|
||||
exit 1
|
||||
}
|
||||
|
||||
while getopts "d:p:t:U:u" OPT;
|
||||
do case "${OPT}" in
|
||||
d) DBNAME=$OPTARG
|
||||
;;
|
||||
p) PORT="-p $OPTARG"
|
||||
;;
|
||||
t) TBL="$OPTARG"
|
||||
;;
|
||||
U) USER="-U $OPTARG"
|
||||
;;
|
||||
u) usage
|
||||
;;
|
||||
[?]) usage
|
||||
esac;
|
||||
done
|
||||
|
||||
|
||||
if [ "$DBNAME" = "" ]
|
||||
then
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
psql $PORT $USER $DBNAME <<_CODE_
|
||||
|
||||
SELECT n.nspname as schema,
|
||||
c.relname as table,
|
||||
a.rolname as owner,
|
||||
d.oid as directory,
|
||||
c.relfilenode as filename,
|
||||
c.reltuples::integer,
|
||||
pg_size_pretty(pg_relation_size( quote_ident( n.nspname ) || '.' || quote_ident( c.relname ) )) as size,
|
||||
pg_size_pretty(pg_relation_size( quote_ident( n.nspname ) || '.' || quote_ident( c.relname ) )
|
||||
+ pg_relation_size( i.indexrelid ) ) as total_size,
|
||||
pg_relation_size( quote_ident( n.nspname ) || '.' || quote_ident( c.relname ) ) as size_bytes,
|
||||
pg_total_relation_size( quote_ident( n.nspname ) || '.' || quote_ident( c.relname ) ) as total_size_bytes,
|
||||
CASE WHEN c.reltablespace = 0
|
||||
THEN 'pg_default'
|
||||
ELSE (SELECT t.spcname
|
||||
FROM pg_tablespace t WHERE (t.oid = c.reltablespace) )
|
||||
END as tablespace
|
||||
FROM pg_class c
|
||||
JOIN pg_namespace n ON (n.oid = c.relnamespace)
|
||||
JOIN pg_index i ON (i.indrelid = c.oid )
|
||||
JOIN pg_authid a ON ( a.oid = c.relowner ),
|
||||
pg_database d
|
||||
WHERE d.datname = current_database()
|
||||
AND relname NOT LIKE 'pg_%'
|
||||
AND relname NOT LIKE 'information%'
|
||||
AND relname NOT LIKE 'sql_%'
|
||||
AND relname LIKE '%$TBL%'
|
||||
AND relkind = 'r'
|
||||
ORDER BY 9 DESC, 1, 2;
|
||||
|
||||
_CODE_
|
||||
@@ -0,0 +1,49 @@
|
||||
#!/bin/bash
|
||||
|
||||
# SHOWS TABLES AND OWNERS FOR ALL TABLES
|
||||
# SHOULD BE RUN AS SUPERUSER
|
||||
|
||||
PORT=""
|
||||
USER="-U postgres"
|
||||
usage() {
|
||||
echo "Usage: $0 -d <dbname> [-U <user> -p <port>]"
|
||||
exit 1
|
||||
}
|
||||
|
||||
while getopts "d:p:uU:" OPT;
|
||||
do case "${OPT}" in
|
||||
d) DBNAME=$OPTARG
|
||||
;;
|
||||
p) PORT="-p $OPTARG"
|
||||
;;
|
||||
U) USER="-U $OPTARG"
|
||||
;;
|
||||
u) usage
|
||||
;;
|
||||
[?]) usage
|
||||
esac;
|
||||
done
|
||||
|
||||
|
||||
if [ "$DBNAME" = "" ]
|
||||
then
|
||||
usage
|
||||
fi
|
||||
|
||||
psql $PORT $USER $DBNAME <<_CODE_
|
||||
SELECT n.nspname as schema,
|
||||
c.relname as table,
|
||||
a.rolname as owner,
|
||||
c.relacl as permits
|
||||
FROM pg_class c
|
||||
JOIN pg_namespace n ON ( n.oid = c.relnamespace )
|
||||
JOIN pg_authid a ON ( a.OID = c.relowner )
|
||||
WHERE relname NOT LIKE 'pg_%'
|
||||
AND relname NOT LIKE 'information%'
|
||||
AND relname NOT LIKE 'sql_%'
|
||||
AND relkind = 'r'
|
||||
-- AND position('useradmin' in ARRAY_TO_STRING(c.relacl, '') )> 0
|
||||
ORDER BY n.nspname,
|
||||
c.relname;
|
||||
|
||||
_CODE_
|
||||
@@ -0,0 +1,55 @@
|
||||
#!/bin/bash
|
||||
|
||||
# SHOWS TABLES AND SIZES FOR ALL TABLES
|
||||
# SHOULD BE RUN AS postgres user
|
||||
|
||||
PORT=""
|
||||
USER=""
|
||||
|
||||
usage() {
|
||||
echo "Usage: $0 -d <dbname> [-p <port> -U <user>]"
|
||||
exit 1
|
||||
}
|
||||
|
||||
while getopts "d:p:U:u" OPT;
|
||||
do case "${OPT}" in
|
||||
d) DBNAME=$OPTARG
|
||||
;;
|
||||
p) PORT="-p $OPTARG"
|
||||
;;
|
||||
U) USER="-U $OPTARG"
|
||||
;;
|
||||
u) usage
|
||||
;;
|
||||
[?]) usage
|
||||
esac;
|
||||
done
|
||||
|
||||
|
||||
if [ "$DBNAME" = "" ]
|
||||
then
|
||||
usage
|
||||
fi
|
||||
|
||||
psql $PORT $USER $DBNAME <<_CODE_
|
||||
|
||||
SELECT n.nspname as schema,
|
||||
c.relname as table,
|
||||
-- c.relkind,
|
||||
a.rolname as owner,
|
||||
d.oid as directory,
|
||||
c.relfilenode as filename,
|
||||
pg_size_pretty(pg_relation_size( quote_ident(n.nspname ) || '.' || quote_ident( c.relname ) )) as size
|
||||
FROM pg_class c
|
||||
JOIN pg_namespace n ON (n.oid = c.relnamespace)
|
||||
JOIN pg_authid a ON ( a.oid = c.relowner ),
|
||||
pg_database d
|
||||
WHERE d.datname = current_database()
|
||||
AND relname NOT LIKE 'pg_%'
|
||||
AND relname NOT LIKE 'information%'
|
||||
AND relname NOT LIKE 'sql_%'
|
||||
AND relkind = 'r'
|
||||
-- AND relkind IN ('i', 'r')
|
||||
ORDER BY 1, 2;
|
||||
|
||||
_CODE_
|
||||
@@ -0,0 +1,58 @@
|
||||
#!/bin/bash
|
||||
|
||||
# SHOWS FOREIGN KEY COUNT FOR EACH TABLE
|
||||
# THEN SHOWS FOREIGN KEYS FOR EACH TABLE
|
||||
|
||||
PORT=""
|
||||
USER=""
|
||||
|
||||
usage() {
|
||||
echo "Usage: $0 -d <dbname> [-U <user> -p <port>]"
|
||||
exit 1
|
||||
}
|
||||
|
||||
while getopts "d:p:uU:" OPT;
|
||||
do case "${OPT}" in
|
||||
d) DBNAME=$OPTARG
|
||||
;;
|
||||
p) PORT="-p $OPTARG"
|
||||
;;
|
||||
U) USER="-U $OPTARG"
|
||||
;;
|
||||
u) usage
|
||||
;;
|
||||
[?]) usage
|
||||
esac;
|
||||
done
|
||||
|
||||
if [ "$DBNAME" = "" ]
|
||||
then
|
||||
usage
|
||||
fi
|
||||
|
||||
psql $PORT $USER $DBNAME <<_CODE_
|
||||
|
||||
SELECT n.nspname as schema,
|
||||
t.relname as table,
|
||||
count(c.conname)
|
||||
FROM pg_class t
|
||||
JOIN pg_constraint c ON ( c.conrelid = t.OID AND c.contype = 'f')
|
||||
JOIN pg_namespace n ON (n.oid = t.relnamespace)
|
||||
WHERE relkind = 'r'
|
||||
AND t.relname NOT LIKE 'pg_%'
|
||||
AND t.relname NOT LIKE 'sql_%'
|
||||
GROUP BY 1, 2
|
||||
ORDER BY 1, 3;
|
||||
|
||||
SELECT n.nspname as schema,
|
||||
t.relname as table,
|
||||
c.conname as fk_name
|
||||
FROM pg_class t
|
||||
JOIN pg_constraint c ON ( c.conrelid = t.OID AND c.contype = 'f')
|
||||
JOIN pg_namespace n ON (n.oid = t.relnamespace)
|
||||
WHERE relkind = 'r'
|
||||
AND t.relname NOT LIKE 'pg_%'
|
||||
AND t.relname NOT LIKE 'sql_%'
|
||||
ORDER BY 1, 2, 3;
|
||||
|
||||
_CODE_
|
||||
@@ -0,0 +1,65 @@
|
||||
#!/bin/bash
|
||||
|
||||
# SHOWS ALL TABLES WITH A COLUMN NAME LIKE <ColumnName>
|
||||
|
||||
USER=""
|
||||
PORT=""
|
||||
|
||||
usage() {
|
||||
echo "Usage: $0 -d <dbname> -c <colname> [-U <user> -p <port>]"
|
||||
exit 1
|
||||
}
|
||||
|
||||
while getopts "d:c:p:uU:" OPT;
|
||||
do case "${OPT}" in
|
||||
d) DBNAME=$OPTARG
|
||||
;;
|
||||
p) PORT="-p $OPTARG"
|
||||
;;
|
||||
c) COLNAME="$OPTARG"
|
||||
;;
|
||||
U) USER="-U $OPTARG"
|
||||
;;
|
||||
u) usage
|
||||
;;
|
||||
[?]) usage
|
||||
esac;
|
||||
done
|
||||
|
||||
echo "col=$COLNAME"
|
||||
if [ "$DBNAME" = "" ]
|
||||
then
|
||||
DBNAME="enf"
|
||||
fi
|
||||
|
||||
if [ "$COLNAME" = "" ]
|
||||
then
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
psql -a $USER $PORT $DBNAME <<_CODE_
|
||||
|
||||
SELECt c.table_schema as schema,
|
||||
c.table_name as table,
|
||||
c.column_name as column,
|
||||
c.data_type as type,
|
||||
case when c.data_type LIKE '%char%'
|
||||
then COALESCE(character_maximum_length::text, 'N/A')
|
||||
when c.data_type LIKE '%numeric%'
|
||||
then '(' || c.numeric_precision::text || ', ' || c.numeric_scale::text || ')'
|
||||
when c.data_type LIKE '%int%'
|
||||
then c.numeric_precision::text
|
||||
else COALESCE(character_maximum_length::text, 'N/A')
|
||||
end as size
|
||||
FROM information_schema.columns c
|
||||
WHERE c.table_schema NOT LIKE 'pg_%'
|
||||
AND c.table_schema NOT LIKE 'information%'
|
||||
AND c.table_name NOT LIKE 'sql_%'
|
||||
AND c.column_name LIKE '%$COLNAME%'
|
||||
AND c.is_updatable = 'YES'
|
||||
ORDER BY c.table_name, c.column_name;
|
||||
|
||||
_CODE_
|
||||
|
||||
exit 0
|
||||
@@ -0,0 +1,49 @@
|
||||
#!/bin/bash
|
||||
|
||||
# SHOWS TABLES AND OWNERS FOR ALL TABLES
|
||||
# That have no public grants
|
||||
# SHOULD BE RUN AS SUPERUSER
|
||||
|
||||
USER="-U postgres"
|
||||
PORT=""
|
||||
|
||||
usage() {
|
||||
echo "Usage: $0 -d <dbname> [-U <user> -p <port>]"
|
||||
exit 1
|
||||
}
|
||||
|
||||
while getopts "d:p:uU:" OPT;
|
||||
do case "${OPT}" in
|
||||
d) DBNAME=$OPTARG
|
||||
;;
|
||||
p) PORT="-p $OPTARG"
|
||||
;;
|
||||
U) USER="-U $OPTARG"
|
||||
;;
|
||||
u) usage
|
||||
;;
|
||||
[?]) usage
|
||||
esac;
|
||||
done
|
||||
|
||||
if [ "$DBNAME" = "" ]
|
||||
then
|
||||
usage
|
||||
fi
|
||||
|
||||
psql $PORT $USER $DBNAME <<_CODE_
|
||||
SELECT n.nspname as schema,
|
||||
c.relname,
|
||||
a.rolname as owner,
|
||||
array_to_string(ARRAY[c.relacl], '|') as permits
|
||||
FROM pg_class c
|
||||
JOIN pg_authid a ON (a.OID = c.relowner)
|
||||
JOIN pg_namespace n ON (n.oid = c.relnamespace)
|
||||
WHERE relkind = 'r'
|
||||
AND relname NOT LIKE 'pg_%'
|
||||
AND relname NOT LIKE 'information%'
|
||||
AND relname NOT LIKE 'sql_%'
|
||||
AND position('|=' in array_to_string(ARRAY[relacl], '|')) = 0
|
||||
ORDER BY 1, 2;
|
||||
|
||||
_CODE_
|
||||
@@ -0,0 +1,103 @@
|
||||
#!/bin/bash
|
||||
# Shows tablespace use for all or selected table
|
||||
# that are not in default tablespace
|
||||
|
||||
PORT=""
|
||||
USER=""
|
||||
TBL="%"
|
||||
|
||||
usage() {
|
||||
echo "Usage: $0 -d <dbname> [-t <table> -U <user> -p <port>]"
|
||||
exit 1
|
||||
}
|
||||
|
||||
while getopts "d:t:p:uU:" OPT;
|
||||
do case "${OPT}" in
|
||||
d) DBNAME=$OPTARG
|
||||
;;
|
||||
p) PORT="-p $OPTARG"
|
||||
;;
|
||||
t) TBL=$OPTARG
|
||||
;;
|
||||
U) USER="-U $OPTARG"
|
||||
;;
|
||||
u) usage
|
||||
;;
|
||||
[?]) usage
|
||||
esac;
|
||||
done
|
||||
|
||||
if [ "$DBNAME" = "" ]
|
||||
then
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
getver()
|
||||
{
|
||||
VER=$(psql -t $USER $PORT $DBNAME <<_QRYVER_
|
||||
SELECT version();
|
||||
_QRYVER_
|
||||
)
|
||||
}
|
||||
getver
|
||||
|
||||
VER=$(echo $VER | cut -c -16)
|
||||
echo "Version is $VER"
|
||||
|
||||
gettstver()
|
||||
{
|
||||
TSTVER=$(psql -q -t $HOST $PORT $USER $DBNAME <<_QRY_
|
||||
SELECT CASE WHEN SUBSTRING(version() FROM 12 FOR 3) < '9.2'
|
||||
THEN 'oid'
|
||||
ELSE 'func'
|
||||
END;
|
||||
_QRY_
|
||||
|
||||
)
|
||||
|
||||
TSTVER=${TSTVER:1:4}
|
||||
|
||||
}
|
||||
|
||||
gettstver
|
||||
|
||||
if [ "${TSTVER}" = "oid" ]
|
||||
then
|
||||
TSL="t.spclocation"
|
||||
else
|
||||
TSL="pg_tablespace_location(t.oid)"
|
||||
fi
|
||||
|
||||
tspace_use() {
|
||||
TSPACELIST=$(psql -q $USER $PORT $DBNAME <<_QUERY_
|
||||
|
||||
SELECT CASE WHEN t.spcname IS NULL
|
||||
THEN 'pg_default'
|
||||
ELSE t.spcname
|
||||
END as tablespace,
|
||||
$TSL as location,
|
||||
n.nspname as schema,
|
||||
c.relname as relation,
|
||||
a.rolname as owner,
|
||||
c.relkind as type
|
||||
FROM pg_class c
|
||||
LEFT JOIN pg_tablespace t ON (t.oid = c.reltablespace)
|
||||
JOIN pg_authid a ON ( a.oid = c.relowner )
|
||||
JOIN pg_namespace n ON (n.oid = c.relnamespace)
|
||||
WHERE relname LIKE '%$TBL%'
|
||||
AND relkind IN ('i', 'r')
|
||||
AND c.relname NOT LIKE 'pg_%'
|
||||
AND c.relname NOT LIKE 'sql_%'
|
||||
ORDER BY 1, 2;
|
||||
|
||||
_QUERY_
|
||||
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
tspace_use
|
||||
echo "${TSPACELIST}"
|
||||
|
||||
exit 0
|
||||
@@ -0,0 +1,125 @@
|
||||
#!/bin/bash
|
||||
|
||||
PORT=""
|
||||
USER=""
|
||||
TBL="%"
|
||||
CONSTR=""
|
||||
|
||||
# Shows trigger function on all or selected trigger
|
||||
|
||||
usage() {
|
||||
echo "Usage: $0 -d <dbname> [-U <user> -p <port> -t <trigger> -s ]"
|
||||
echo "dbname REQUIRED"
|
||||
echo "-s will show constraints"
|
||||
exit 1
|
||||
}
|
||||
|
||||
getver()
|
||||
{
|
||||
VER=$(psql -t $PORT $USER $DBNAME <<_QRYVER_
|
||||
SELECT version();
|
||||
_QRYVER_
|
||||
)
|
||||
}
|
||||
|
||||
set_qry_noconstraints() {
|
||||
|
||||
QRY="SELECT c.relname AS table,
|
||||
t.tgname,
|
||||
p.proname AS function_called,
|
||||
-- t.tgisconstraint AS is_constraint,
|
||||
cn.conname AS constraint_nm,
|
||||
CASE WHEN t.tgconstrrelid > 0
|
||||
THEN (SELECT relname
|
||||
FROM pg_class
|
||||
WHERE oid = t.tgconstrrelid)
|
||||
ELSE ''
|
||||
END AS constr_tbl
|
||||
FROM pg_trigger t
|
||||
INNER JOIN pg_proc p ON ( p.oid = t.tgfoid)
|
||||
INNER JOIN pg_class c ON ( c.oid = t.tgrelid)
|
||||
LEFT JOIN pg_constraint cn ON ( cn.oid = t.tgconstraint )
|
||||
WHERE tgname NOT LIKE 'pg_%'
|
||||
AND tgname NOT LIKE 'RI_%' -- < comment out to see constraints
|
||||
AND tgname LIKE '%$TRG%'
|
||||
ORDER BY 1;"
|
||||
|
||||
}
|
||||
|
||||
set_qry_constraints() {
|
||||
|
||||
QRY="SELECT c.relname AS table,
|
||||
t.tgname,
|
||||
p.proname AS function_called,
|
||||
-- t.tgisconstraint AS is_constraint,
|
||||
cn.conname AS constraint_nm,
|
||||
CASE WHEN t.tgconstrrelid > 0
|
||||
THEN (SELECT relname
|
||||
FROM pg_class
|
||||
WHERE oid = t.tgconstrrelid)
|
||||
ELSE ''
|
||||
END AS constr_tbl
|
||||
FROM pg_trigger t
|
||||
INNER JOIN pg_proc p ON ( p.oid = t.tgfoid)
|
||||
INNER JOIN pg_class c ON ( c.oid = t.tgrelid)
|
||||
LEFT JOIN pg_constraint cn ON ( cn.oid = t.tgconstraint )
|
||||
WHERE tgname NOT LIKE 'pg_%'
|
||||
AND tgname LIKE '%$TRG%'
|
||||
ORDER BY 1;"
|
||||
|
||||
}
|
||||
|
||||
|
||||
list_triggers() {
|
||||
LIST=$(psql -q $PORT $USER $DBNAME <<_QUERY_
|
||||
|
||||
$QRY
|
||||
|
||||
_QUERY_
|
||||
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
###########################################################
|
||||
# MAIN #
|
||||
###########################################################
|
||||
|
||||
while getopts "d:p:st:uU:" OPT;
|
||||
do case "${OPT}" in
|
||||
d) DBNAME=$OPTARG
|
||||
;;
|
||||
p) PORT="-p $OPTARG"
|
||||
;;
|
||||
s) CONSTR="TRUE"
|
||||
;;
|
||||
t) TRG="$OPTARG"
|
||||
;;
|
||||
U) USER="-U $OPTARG"
|
||||
;;
|
||||
u) usage
|
||||
;;
|
||||
[?]) usage
|
||||
esac;
|
||||
done
|
||||
|
||||
if [ "$DBNAME" = "" ]
|
||||
then
|
||||
usage
|
||||
fi
|
||||
|
||||
getver
|
||||
VER=$(echo $VER | cut -c -16)
|
||||
echo "Version is $VER"
|
||||
|
||||
if [ "$CONSTR" = "TRUE" ]
|
||||
then
|
||||
set_qry_constraints
|
||||
else
|
||||
set_qry_noconstraints
|
||||
fi
|
||||
|
||||
list_triggers
|
||||
echo "${LIST}"
|
||||
|
||||
exit 0
|
||||
@@ -0,0 +1,59 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Shows Tables access for user specified
|
||||
# SHOULD BE RUN AS SUPERUSER
|
||||
|
||||
USER=""
|
||||
PORT=""
|
||||
|
||||
usage() {
|
||||
echo "Usage: $0 -d <dbname> -a <user2check> [-U <user> -p <port>]"
|
||||
exit 1
|
||||
}
|
||||
|
||||
while getopts "d:a:p:uU:" OPT;
|
||||
do case "${OPT}" in
|
||||
d) DBNAME=$OPTARG
|
||||
;;
|
||||
a) CKUSER=$OPTARG
|
||||
;;
|
||||
p) PORT="-p $OPTARG"
|
||||
;;
|
||||
U) USER="-U $OPTARG"
|
||||
;;
|
||||
u) usage
|
||||
;;
|
||||
[?]) usage
|
||||
esac;
|
||||
done
|
||||
|
||||
if [ "$DBNAME" = "" ]
|
||||
then
|
||||
DBNAME="enf"
|
||||
fi
|
||||
|
||||
if [ "$CKUSER" = "" ]
|
||||
then
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
psql $USER $PORT $DBNAME <<_CODE_
|
||||
SELECT n.nspname,
|
||||
c.relname,
|
||||
array_to_string(ARRAY[c.relacl], '|') as permits,
|
||||
position('useradmin' in array_to_string(ARRAY[relacl], '|'))
|
||||
FROM pg_class c
|
||||
JOIN pg_namespace n ON (n.oid = c.relnamespace)
|
||||
WHERE n.nspname not like 'pg_%'
|
||||
AND n.nspname not like 'inform_%'
|
||||
AND relkind = 'r'
|
||||
AND (position('$CKUSER' in array_to_string(ARRAY[relacl], '|')) > 0
|
||||
OR position( (SELECT g.rolname
|
||||
FROM pg_auth_members r
|
||||
JOIN pg_authid g ON (r.roleid = g.oid)
|
||||
JOIN pg_authid u ON (r.member = u.oid)
|
||||
AND u.rolname LIKE '$CKUSER%') in array_to_string(ARRAY[relacl], '|')) > 0 )
|
||||
ORDER BY 1,2;
|
||||
|
||||
_CODE_
|
||||
@@ -0,0 +1,76 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Shows table access detail for user specified
|
||||
# SHOULD BE RUN AS SUPERUSER
|
||||
|
||||
USER=""
|
||||
PORT=""
|
||||
|
||||
usage() {
|
||||
echo "Usage: $0 -d <dbname> -a <user2check> [-U <user> -p <port>]"
|
||||
exit 1
|
||||
}
|
||||
|
||||
while getopts "d:a:p:uU:" OPT;
|
||||
do case "${OPT}" in
|
||||
d) DBNAME=$OPTARG
|
||||
;;
|
||||
a) CKUSER=$OPTARG
|
||||
;;
|
||||
p) PORT="-p $OPTARG"
|
||||
;;
|
||||
U) USER="-U $OPTARG"
|
||||
;;
|
||||
u) usage
|
||||
;;
|
||||
[?]) usage
|
||||
esac;
|
||||
done
|
||||
|
||||
if [ "$DBNAME" = "" ]
|
||||
then
|
||||
DBNAME="enf"
|
||||
fi
|
||||
|
||||
if [ "$CKUSER" = "" ]
|
||||
then
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
psql $USER $PORT $DBNAME <<_CODE_
|
||||
SELECT n.nspname,
|
||||
c.relname,
|
||||
CASE WHEN has_table_privilege('$CKUSER', quote_ident(n.nspname) || '.' || quote_ident(c.relname), 'SELECT')
|
||||
THEN 'YES'
|
||||
ELSE 'no'
|
||||
END AS "SEL",
|
||||
CASE WHEN has_table_privilege('$CKUSER', quote_ident(n.nspname) || '.' || quote_ident(c.relname), 'INSERT')
|
||||
THEN 'YES'
|
||||
ELSE 'no'
|
||||
END AS "INS",
|
||||
CASE WHEN has_table_privilege('$CKUSER', quote_ident(n.nspname) || '.' || quote_ident(c.relname), 'UPDATE')
|
||||
THEN 'YES'
|
||||
ELSE 'no'
|
||||
END AS "UPD",
|
||||
CASE WHEN has_table_privilege('$CKUSER', quote_ident(n.nspname) || '.' || quote_ident(c.relname), 'DELETE')
|
||||
THEN 'YES'
|
||||
ELSE 'no'
|
||||
END AS "DEL",
|
||||
array_to_string(ARRAY[c.relacl], '|') as permits
|
||||
FROM pg_class c
|
||||
JOIN pg_namespace n ON (n.oid = c.relnamespace)
|
||||
WHERE n.nspname not like 'pg_%'
|
||||
AND n.nspname not like 'inform_%'
|
||||
AND relkind = 'r'
|
||||
/*
|
||||
AND (position('$CKUSER' in array_to_string(ARRAY[relacl], '|')) > 0
|
||||
OR position( (SELECT g.rolname
|
||||
FROM pg_auth_members r
|
||||
JOIN pg_authid g ON (r.roleid = g.oid)
|
||||
JOIN pg_authid u ON (r.member = u.oid)
|
||||
AND u.rolname LIKE '$CKUSER%') in array_to_string(ARRAY[relacl], '|')) > 0 )
|
||||
*/
|
||||
ORDER BY 1,2;
|
||||
|
||||
_CODE_
|
||||
Reference in New Issue
Block a user