Не получается ловить psql ошибку с помощью bash
Запускаю на сервере с помощью bash скрипт, который взаимодействует с sql таблицами. Нужно выловить ошибки, но не получается. Нижний if последняя попытка вылавливать, если что-то идет не так, но никакого успеха он не приносит. Сам psql скрипт функционален, если есть полный доступ к схеме.
#!/usr/bin/bash
if [ -z "$1" ]; then
echo "schema name is missing"
exit 1
fi
psql -h pg -d studs -U s314463 << EOF
DO \$\$
DECLARE
table_rec RECORD;
schema_name TEXT;
table_name TEXT;
table_count INTEGER;
column_count INTEGER;
index_count INTEGER;
row_count BIGINT;
BEGIN
schema_name = '$1';
SELECT count(*) INTO table_count
FROM pg_tables
WHERE schemaname = schema_name;
SELECT sum(numcols) INTO column_count
FROM pg_namespace
JOIN pg_class ON pg_namespace.oid = pg_class.relnamespace
JOIN (
SELECT attrelid, count(*) as numcols
FROM pg_attribute
WHERE attnum > 0
GROUP BY attrelid
) AS cols ON pg_class.oid = cols.attrelid
WHERE pg_namespace.nspname = schema_name
AND pg_class.relkind = 'r';
SELECT count(*) INTO index_count
FROM pg_indexes
WHERE schemaname = schema_name;
RAISE NOTICE 'Количество таблиц в схеме % - %', schema_name, table_count;
RAISE NOTICE 'Количество столбцов в схеме % - %', schema_name, column_count;
RAISE NOTICE 'Количество индексов в схеме % - %', schema_name, index_count;
RAISE NOTICE '';
RAISE NOTICE 'Таблицы схемы % ', schema_name;
RAISE NOTICE '';
RAISE NOTICE ' Имя Столбцов Строк';
FOR table_rec IN
SELECT c.relname, count(a.attname) AS column_count, c.reltuples AS row_count
FROM pg_class c
LEFT JOIN pg_namespace n ON n.oid = c.relnamespace
LEFT JOIN pg_attribute a ON a.attrelid = c.oid
WHERE c.relkind = 'r'
AND n.nspname = schema_name
AND a.attnum > 0
GROUP BY c.relname, c.reltuples
ORDER BY c.relname
LOOP
EXECUTE 'SELECT count(*) FROM ' || table_rec.relname INTO row_count;
RAISE NOTICE ' % % %', table_rec.relname, table_rec.column_count, row_count;
END LOOP;
END \$\$;
EOF
if [ $? != 0 ]; then
echo "Error loading the table."
exit 1
fi
exit 0
Источник: Stack Overflow на русском