Основные команды PostgreSQL в интерактивном режиме:
- \connect db_name – подключиться к базе с именем db_name
- \du – список пользователей
- \dp (или \z) – список таблиц, представлений, последовательностей, прав доступа к ним
- \di – индексы
- \ds – последовательности
- \dt – список таблиц
- \dt+ — список всех таблиц с описанием
- \dt *s* — список всех таблиц, содержащих s в имени
- \dv – представления
- \dS – системные таблицы
- \d+ – описание таблицы
- \o – пересылка результатов запроса в файл
- \l – список баз данных
- \i – читать входящие данные из файла
- \e – открывает текущее содержимое буфера запроса в редакторе (если иное не указано в окружении переменной EDITOR, то будет использоваться по умолчанию vi)
- \d “table_name” – описание таблицы
- \i запуск команды из внешнего файла, например \i /my/directory/my.sql
- \pset – команда настройки параметров форматирования
- \echo – выводит сообщение
- \set – устанавливает значение переменной среды. Без параметров выводит список текущих переменных (\unset – удаляет).
- \? – справочник psql
- \help – справочник SQL
- \q (или Ctrl+D) – выход с программы
Подключение к серверу баз данных
Итак, утилита psql позволяет вам управлять сервером баз данных PostgreSQL. Но вначале нужно подключиться к серверу. Подключиться с помощью этой утилиты вы можете к локально установленному серверу, или удалённому используя сеть. Подключение выполняется таким способом:
$ psql -d <база> -U <роль> -h <узел> -p <порт>
По умолчанию при подключении вы используете:
- в качестве имени базы и роли – имя пользователя ОС;
- в качестве адреса сервера – локальный сокет, который находится в каталоге /tmp/ и порт 5432.
Таким образом если вы в системе находитесь под пользователем postgres, то следующие команды будут равнозначными:
$ psql $ psql -d postgres -U postgres -h /tmp/ -p 5432
Для получения информации о узле к которому вы подключены используется команда \conninfo:
postgres@s-pg13:~$ psql psql (13.3) Type "help" for help. postgres=# \conninfo You are connected to database "postgres" as user "postgres" via socket in "/tmp" at port "5432". postgres=# \q postgres@s-pg13:~$ psql -d postgres -U postgres -h /tmp -p 5432 psql (13.3) Type "help" for help. postgres=# \conninfo You are connected to database "postgres" as user "postgres" via socket in "/tmp" at port "5432". postgres=# \q
Не выходя из терминала psql вы можете подключится к другому узлу с помощью команды .
Все команды psql начинаются с символа обратного слеша “\”. Но помимо этих команд можно выполнять запросы SQL, для них обратный слеш не нужен, например SELECT.
Чтобы выйти из терминала psql можно использовать 2 равносильные команды и .
Какие параметры требуют перезапуск сервера?
Чтобы это выяснить нужно посмотреть все параметры у которых context = postmaster:
postgres@postgres=# SELECT name, setting, unit FROM pg_settings WHERE context = 'postmaster'; name | setting | unit -------------------------------------+---------------------------------------+------ archive_mode | off | autovacuum_freeze_max_age | 200000000 | autovacuum_max_workers | 3 | autovacuum_multixact_freeze_max_age | 400000000 | bonjour | off | bonjour_name | | cluster_name | | config_file | /usr/local/pgsql/data/postgresql.conf | data_directory | /usr/local/pgsql/data | data_sync_retry | off | dynamic_shared_memory_type | posix | event_source | PostgreSQL | external_pid_file | | hba_file | /usr/local/pgsql/data/pg_hba.conf | hot_standby | on | huge_pages | try | ident_file | /usr/local/pgsql/data/pg_ident.conf | ignore_invalid_pages | off | jit_provider | llvmjit | listen_addresses | localhost | logging_collector | off | max_connections | 100 | max_files_per_process | 1000 | max_locks_per_transaction | 64 | max_logical_replication_workers | 4 | max_pred_locks_per_transaction | 64 | max_prepared_transactions | 0 | max_replication_slots | 10 | max_wal_senders | 10 | max_worker_processes | 8 | old_snapshot_threshold | -1 | min port | 5432 | recovery_target | | recovery_target_action | pause | recovery_target_inclusive | on | recovery_target_lsn | | recovery_target_name | | recovery_target_time | | recovery_target_timeline | latest | recovery_target_xid | | restore_command | | shared_buffers | 16384 | 8kB shared_memory_type | mmap | shared_preload_libraries | | superuser_reserved_connections | 3 | track_activity_query_size | 1024 | B track_commit_timestamp | off | unix_socket_directories | /tmp | unix_socket_group | | unix_socket_permissions | 0777 | wal_buffers | 512 | 8kB wal_level | replica | wal_log_hints | off | (53 rows) Time: 0,666 ms
Сводка
Имя статьи
PostgreSQL. Конфигурирование
Описание
Сервер баз данных PostgreSQL имеет очень много параметров с помощью которых его можно настроить под любые нужды. В этой статье мы не будет рассматривать все эти параметры. Здесь мы посмотрим на различные способы настройки этого сервера.
Решение 1. Установите для типа запуска BITS и службы обновления Windows значение автоматический.
Проблема с обновлением Windows может возникнуть, если какая-либо из основных служб обновления находится в состоянии ошибки или отключена. В этом контексте установка типа запуска этих служб обновления (т. Е. BITS и службы обновления Windows) на автоматический может решить проблему.
- Нажмите клавишу Windows и в поиске Windows введите: Services. Теперь наведите указатель мыши на результат «Службы» и на правой панели меню «Пуск» выберите «Запуск от имени администратора».Открыть сервисы в качестве администратора
- Теперь дважды щелкните службу Центра обновления Windows (или щелкните правой кнопкой мыши и выберите «Свойства») и измените ее тип запуска на «Автоматический».Откройте свойства службы обновления Windows
- Затем нажмите кнопку «Пуск» и примените изменения.Установите тип запуска службы обновления Windows на автоматический и запустите ее.
- После этого повторите то же самое для службы BITS (фоновая интеллектуальная служба передачи), чтобы установить для ее типа запуска значение «Автоматический» и запустить его.Измените тип запуска BITS на автоматический
- Теперь перезагрузите компьютер и проверьте, решена ли проблема со службой обновлений.
- Если нет, нажмите клавишу Windows и откройте Настройки.
- Теперь выберите «Обновление и безопасность» и на левой панели перейдите на вкладку «Устранение неполадок».Открыть обновление и безопасность
- Затем на правой панели окна «Обновление и безопасность» откройте Дополнительные средства устранения неполадок.Откройте дополнительные средства устранения неполадок
- Теперь в разделе Get Up and Running разверните опцию Windows Update.
- Затем нажмите «Запустить средство устранения неполадок» и дождитесь завершения процесса.Запустите средство устранения неполадок Центра обновления Windows.
- По завершении примените рекомендуемые шаги по устранению неполадок и проверьте, нормально ли работает обновление Windows.
Системные требования для установки PostgreSQL 12 на Windows
PostgreSQL 12 можно установить не на все версии Windows, в частности официально поддерживаются следующие версии и только 64 битные:
- Windows Server 2012 R2;
- Windows Server 2016;
- Windows Server 2019.
Как видим, в официальном перечне нет Windows 10, однако установка на данную систему проходит без проблем, как и последующее функционирование PostgreSQL.
Кроме этого есть и другие требования:
- Процессор как минимум с частотой 1 гигагерц;
- 2 гигабайта оперативной памяти;
- Как минимум 512 мегабайт свободного места на диске (рекомендуется больше для установки дополнительных компонентов);
- Также рекомендовано, чтобы все обновления операционной системы Windows были установлены.
Запуск Apache 2.4 с модулем 1С внутри Docker контейнера
Про Apache и про Linux слышали, наверное, все. А вот про Docker пока нет, но он сильно набирает популярность последнее время и не зря. Поделюсь своим опытом и дам пошаговую инструкцию настройки веб-сервера Apache с модулем 1С внутри Docker контейнера на Linux хосте. При этом сам сервер 1С может находиться совсем на другой машине и на другой операционной системе
Это не важно, главное чтобы Apache смог достучаться до сервера 1С по TCP. В статье дам подробное пояснение по каждой используемой команде со ссылками на документацию по Docker, чтобы не создавалось ощущение непонятной магии
Также прилагаю git репозиторий с описанием всей конфигурации, можете попробовать развернуть у себя буквально за 10 минут.
Взаимодействие psql с операционной системой
Терминал psql умеет выполнять команды операционной системы. Для этого нужно использовать команду “\!“. Например так:
postgres=# \! hostname s-pg13
Можно установить переменную окружения в систему с помощью команды \setenv:
postgres=# \setenv TEST Hello postgres=# \! echo $TEST Hello
А для того чтобы перевести вывод команд в файл нужно использовать ‘\o имя_файла’. И чтобы вернуть всё обратно используем “\o” без имени файла. Например:
postgres=# \o dba.log postgres=# SELECT schemaname, tablename, tableowner FROM pg_tables LIMIT 5; postgres=# \! cat dba.log ---------------------- schemaname | pg_catalog tablename | pg_statistic tableowner | postgres ---------------------- schemaname | pg_catalog tablename | pg_type tableowner | postgres ---------------------- schemaname | pg_catalog tablename | pg_foreign_table tableowner | postgres ---------------------- schemaname | pg_catalog tablename | pg_authid tableowner | postgres ---------------------- schemaname | pg_catalog tablename | pg_statistic_ext_data tableowner | postgres postgres=# \o postgres=# \x Expanded display is off.
В предыдущем листинге с помощью последней команды мы выключили расширенный режим.
Помимо вывода в файл psql умеет выполнять команды из файла. Это делается с помощью команды “\i имя файла”. Вот пример:
postgres=# \q postgres@s-pg13:~$ cat <<EOT >> dba1.log > SELECT 'pg_statistic: '|| count(*) FROM pg_statistic; > SELECT 'pg_type: '|| count(*) FROM pg_type; > SELECT 'pg_foreign_table: '|| count(*) FROM pg_foreign_table; > EOT postgres@s-pg13:~$ psql psql (13.3) Type "help" for help. postgres=# \! cat dba1.log SELECT 'pg_statistic: '|| count(*) FROM pg_statistic; SELECT 'pg_type: '|| count(*) FROM pg_type; SELECT 'pg_foreign_table: '|| count(*) FROM pg_foreign_table; postgres=# \a \t \pset fieldsep ' ' Output format is unaligned. Tuples only is on. Field separator is " ". postgres=# \i dba1.log pg_statistic: 402 pg_type: 411 pg_foreign_table: 0 postgres=# \a \t \pset fieldsep '|' Output format is aligned. Tuples only is off. Field separator is "|".
В примере выше мы проделали следующее:
- вышли из psql;
- создали скрипт dba1.log, который подсчитывает количество строк из:
- pg_statistic – статистическая информация о содержимом базы данных;
- pg_type – информация о типах данных;
- pg_foreign_table – дополнительная информация о сторонних таблицах.
- обратно вернулись в psql;
- прочитали файл dba1.log;
- изменили формат вывода;
- выполнили скрипт sql команд;
- вернули формат вывода в прежнее состояние.
Установка PostgreSQL на Linux (Mint)
Для подключения к базе данных PostgreSQL понадобится установленный PostgreSQL клиент:
sudo apt install postgresql-client-<VERSION>
Например:
sudo apt install postgresql-client-12
Для установки PostgreSQL сервера:
sudo apt install postgresql
Проверим, можем ли мы подключиться к базе данных PostgreSQL:
sudo -u postgres psql -c "SELECT version();"
Вывод команды должен быть примерно таким:
$ sudo -u postgres psql -c "SELECT version();" version ---------------------------------------------------------------------------------------------------------------------------------------- PostgreSQL 10.10 (Ubuntu 10.10-0ubuntu0.18.04.1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0, 64-bit (1 row)
Запуск и настройка pgAdmin 4
PostgreSQL 12 и pgAdmin 4 мы установили, теперь давайте запустим pgAdmin 4, подключимся к серверу и настроим рабочую среду pgAdmin.
Чтобы запустить pgAdmin 4, зайдите в меню пуск, найдите пункт PostgreSQL 12, а в нем pgAdmin 4.
Подключение к серверу PostgreSQL 12
pgAdmin 4 имеет веб интерфейс, поэтому в результате у Вас должен запуститься браузер, а в нем открыться приложение pgAdmin 4.
При первом запуске pgAdmin 4 появится окно Set Master Password», в котором мы должны задать «мастер-пароль», это можно и не делать, однако если мы будем сохранять пароль пользователя (галочка «Сохранить пароль»), например, для того чтобы каждый раз при подключении не вводить его, то настоятельно рекомендуется придумать и указать здесь дополнительный пароль, это делается один раз.
Вводим и нажимаем «ОК».
Чтобы подключиться к только что установленному локальному серверу PostgreSQL в обозревателе серверов, щелкаем по пункту «PostgreSQL 12».
В итоге запустится окно «Connect to Server», в котором Вам нужно ввести пароль системного пользователя postgres, т.е. это тот пароль, который Вы придумали, когда устанавливали PostgreSQL. Вводим пароль, ставим галочку «Save Password», для того чтобы сохранить пароль и каждый раз не вводить его (благодаря функционалу «мастер-пароля», все сохраненные таким образом пароли будут дополнительно шифроваться).
Нажимаем «OK».
В результате Вы подключитесь к локальному серверу PostgreSQL 12 и увидите все объекты, которые расположены на данном сервере.
Установка русского языка в pgAdmin 4
Как видите, по умолчанию интерфейс pgAdmin 4 на английском языке, если Вас это не устраивает, Вы можете очень просто изменить язык на тот, который Вам нужен. pgAdmin 4 поддерживает много языков, в том числе и русский.
Для того чтобы изменить язык pgAdmin 4, необходимо зайти в меню «File -> Preferences».
Затем найти пункт «User Languages», и в соответствующем поле выбрать значение «Russian». Для сохранения настроек нажимаем Save», после этого перезапускаем pgAdmin 4 или просто обновляем страницу в браузере.
В результате pgAdmin 4 будет русифицирован.
Пример написания SQL запроса в Query Tool (Запросник)
Для того чтобы убедиться в том, что наш сервер PostgreSQL работает, давайте напишем простой запрос SELECT, который покажет нам версию сервера PostgreSQL.
Для написания SQL запросов в pgAdmin 4 используется инструмент Query Tool или на русском «Запросник», его можно запустить с помощью иконки на панели или из меню «Инструменты».
После того как Вы откроете Query Tool, напишите
SELECT VERSION()
Этот запрос показывает версию PostgreSQL.
Как видите, все работает!
DDL для управления коллекциями схем
В базе данных можно создавать коллекции схем XML и связывать их с переменными и столбцами типа xml . Для управления коллекциями схем в базе данных в SQL Server предусмотрены следующие инструкции DDL:
-
CREATE XML SCHEMA COLLECTION (Transact-SQL) импортирует компоненты схемы в базу данных.
-
ALTER XML SCHEMA COLLECTION (Transact-SQL) изменяет компоненты схемы в существующей коллекции схем XML.
-
DROP XML SCHEMA COLLECTION (Transact-SQL) полностью удаляет коллекцию схем XML и все ее компоненты.
Чтобы использовать коллекцию XML-схем и содержащиеся в ней схемы, следует сначала создать коллекцию и схемы с помощью инструкции CREATE XML SCHEMA COLLECTION. После создания коллекции схемы можно создавать переменные и столбцы типа xml и связывать с ними коллекцию схем
Обратите внимание, что после создания коллекции различные компоненты схем будут храниться в метаданных. Кроме того, добавлять большие компоненты в существующие схемы или новые схемы в существующую коллекцию можно с помощью инструкции ALTER XML SCHEMA COLLECTION
Удалить коллекцию схем можно с помощью инструкции DROP XML SCHEMA COLLECTION. При этом удаляются все схемы в коллекции и сам объект коллекции
Обратите внимание, что для удаления коллекции схем должны выполняться условия, описанные в разделе DROP XML SCHEMA COLLECTION (Transact-SQL)
Конфигурационный файл postgresql.conf
Главный конфигурационный файл для кластера PostgreSQL – это postgresql.conf, в разных системах он может находится в разных местах. Так как мы собирали сервер из исходников и не меняли путь хранения этого файла, то по умолчанию он будет находится в каталоге PGDATA:
postgres@s-pg13:~$ echo $PGDATA /usr/local/pgsql/data postgres@s-pg13:~$ ls -l $PGDATA/postgresql.conf -rw------- 1 postgres postgres 28023 июн 21 15:15 /usr/local/pgsql/data/postgresql.conf
Этот конфигурационный файл читается один раз при запуске сервера. Если параметр указан несколько раз, то применяется последний.
Самый точный способ узнать расположение этого файла, посмотреть из терминала psql:
postgres@s-pg13:~$ psql Timing is on. psql (13.3) Type "help" for help. postgres@postgres=# SHOW config_file; config_file --------------------------------------- /usr/local/pgsql/data/postgresql.conf (1 row) Time: 0,391 ms
postgres@postgres=# \q postgres@s-pg13:~$ pg_ctl reload server signaled
Второй способ – из терминала psql:
postgres@s-pg13:~$ psql Timing is on. psql (13.3) Type "help" for help. postgres@postgres=# SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) Time: 0,555 ms
Но есть некоторые параметры, для изменения которых потребуется перезапуск сервера.
Работа с шаблонами баз данных
При установке PostgreSQL по умолчанию создаются три базы данных: postgres, template0, template1.
Template0 и template1 — это шаблоны баз данных, из которых в дальнейшем будут создаваться пользовательские БД.
Фактически, когда вы выполняете команду CREATE DATABASE, Postgres создает клон базы template1. Если внести изменения в template1, они будут наследоваться всеми новыми создаваемыми базами. Это позволяет, например, добавить в template1 необходимые вам таблицы с данными или установить расширения, после чего не потребуется добавлять их для каждой новой базы.
Обратите внимание, что для установки расширений необходимо подключиться к template1 от суперпользователя (postgres или другой роли, имеющей данные привилегии). Подключитесь к шаблону template1:
Подключитесь к шаблону template1:
\c template1
И установите расширение:
CREATE EXTENSION название_расширения;
Например, если вы установите в template1 расширение pgcrypto, то в дальнейшем, при выполнении CREATE DATABASE, новые базы будут создаваться с уже установленным pgrypto.
Template0 — это исходная база, которая используется, когда нужно создать новую базу без каких-либо изменений, внесенных в шаблон template1, или же вернуть template1 в его изначальное состояние.
Чтобы создать «чистую» базу на основе template0, нужно выполнить:
CREATE DATABASE имя_базы TEMPLATE template0;
Также template0 необходима, если вам нужно внести изменения в кодировку или локаль создаваемой базы данных. По умолчанию (при использовании template1) эти изменения невозможны.
В этом случае нужно при создании базы указать template0 в качестве шаблона и указать требуемую кодировку и/или локаль, например:
CREATE DATABASE имя_базы TEMPLATE template0 ENCODING 'SQL_ASCII';
Пересоздание template1
С помощью template0 вы также можете вернуть базу template1 в исходный вид: для этого потребуется ее удалить, а после создать заново, на основе шаблона template0.
Сначала необходимо указать, что template1 не является шаблоном, чтобы удаление стало возможно:
UPDATE pg_database SET datistemplate = false WHERE datname = 'template1';
Далее удалить template1:
DROP DATABASE template1;
И создать базу template1 заново, указав, что она будет являться шаблоном:
CREATE DATABASE template1 OWNER postgres TEMPLATE template0 is_template true;
Создать базу данных
Создадим базу данных
heihei_ru_db
с кодировкой utf8
CREATE DATABASE «heihei_ru_db» WITH OWNER «postgres» ENCODING ‘UTF8’;
CREATE DATABASE
Создадим базу данных heihei с кодировкой utf8 и укажем значения для Collate, Ctype и Template
CREATE DATABASE «heihei» WITH OWNER «postgres» ENCODING
‘UTF8’ LC_COLLATE = ‘C’ LC_CTYPE = ‘C’ TEMPLATE = template0;
CREATE DATABASE
Проверим, что получилось
\l
Name | Owner | Encoding | Collate | Ctype | Access privileges
—————+———-+———-+—————————-+—————————-+————————
heihei | postgres | UTF8 | C | C |
urn.su | postgres | UTF8 | English_United States.1252 | English_United States.1252 |
topbicyle.ru | postgres | UTF8 | English_United States.1252 | English_United States.1252 |
postgres | postgres | UTF8 | English_United States.1252 | English_United States.1252 |
template0 | postgres | UTF8 | English_United States.1252 | English_United States.1252 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | English_United States.1252 | English_United States.1252 | =c/postgres +
| | | | | postgres=CTc/postgres
test | postgres | UTF8 | English_United States.1252 | English_United States.1252 |
(7 rows)
Если я в
bash
сделаю
locale -a
То получу сразу четыре доступные кодировки
C
C.UTF-8
en_US.utf8
POSIX
Но создать БД, например, с en_US.utf8 у меня не получается
CREATE DATABASE «heihei» WITH OWNER «postgres» ENCODING
‘UTF8’ LC_COLLATE = ‘en_US.utf8’ LC_CTYPE = ‘en_US.utf8’ TEMPLATE = template0;
Приводит к ошибке
ERROR: invalid locale name: «en_US.UTF-8»
UPD: Выполнил такую же команду в
Ubuntu
и база успешно создана
CREATE DATABASE «new_db» WITH OWNER «postgres» ENCODING ‘UTF8’ LC_COLLATE = ‘en_US.UTF-8’ LC_CTYPE = ‘en_US.UTF-8’ TEMPLATE = template0;
CREATE DATABASE
Формат выводимой информации
Когда вы вводите и выполняете какой-нибудь запрос в терминале psql, то в выводе видите результат этого запроса. По умолчанию такой вывод показывается в форме таблички. Но вы можете настроить формат выводимой информации сами:
- – с выравниванием / без выравнивания
- – отображение строки заголовка и итоговой строки / без такого отображения
- – можно задать разделитель (по умолчанию используется вертикальная черта ‘|’)
- – расширенный режим, когда нужно вывести много столбцов одной таблицы, они будут выведены в один столбец
Например, получим информацию из представления pg_tables. Затем поменяем формат и снова получим информацию. А затем все вернем на место:
postgres@s-pg13:~$ psql psql (13.3) Type "help" for help. postgres=# SELECT * FROM pg_tables LIMIT 5; schemaname | tablename | tableowner | tablespace | hasindexes | hasrules | hastriggers | rowsecurity ------------+-----------------------+------------+------------+------------+----------+-------------+------------- pg_catalog | pg_statistic | postgres | | t | f | f | f pg_catalog | pg_type | postgres | | t | f | f | f pg_catalog | pg_foreign_table | postgres | | t | f | f | f pg_catalog | pg_authid | postgres | pg_global | t | f | f | f pg_catalog | pg_statistic_ext_data | postgres | | t | f | f | f (5 rows) postgres=# \t \a \pset fieldsep ' ' Tuples only is on. Output format is unaligned. Field separator is " ". postgres=# SELECT * FROM pg_tables LIMIT 5; pg_catalog pg_statistic postgres t f f f pg_catalog pg_type postgres t f f f pg_catalog pg_foreign_table postgres t f f f pg_catalog pg_authid postgres pg_global t f f f pg_catalog pg_statistic_ext_data postgres t f f f postgres=# \t \a \pset fieldsep '|' Tuples only is off. Output format is aligned. Field separator is "|". postgres=# SELECT * FROM pg_tables LIMIT 5; schemaname | tablename | tableowner | tablespace | hasindexes | hasrules | hastriggers | rowsecurity ------------+-----------------------+------------+------------+------------+----------+-------------+------------- pg_catalog | pg_statistic | postgres | | t | f | f | f pg_catalog | pg_type | postgres | | t | f | f | f pg_catalog | pg_foreign_table | postgres | | t | f | f | f pg_catalog | pg_authid | postgres | pg_global | t | f | f | f pg_catalog | pg_statistic_ext_data | postgres | | t | f | f | f (5 rows)
А вот пример использования расширенного режима (\x). Выглядит это так, как будто табличку перевернули:
postgres=# \x Expanded display is on. postgres=# SELECT * FROM pg_tables LIMIT 5; ----------------------- schemaname | pg_catalog tablename | pg_statistic tableowner | postgres tablespace | hasindexes | t hasrules | f hastriggers | f rowsecurity | f ----------------------- schemaname | pg_catalog tablename | pg_type tableowner | postgres tablespace | hasindexes | t hasrules | f hastriggers | f rowsecurity | f ----------------------- schemaname | pg_catalog tablename | pg_foreign_table tableowner | postgres tablespace | hasindexes | t hasrules | f hastriggers | f rowsecurity | f ----------------------- schemaname | pg_catalog tablename | pg_authid tableowner | postgres tablespace | pg_global hasindexes | t hasrules | f hastriggers | f rowsecurity | f ----------------------- schemaname | pg_catalog tablename | pg_statistic_ext_data tableowner | postgres tablespace | hasindexes | t hasrules | f hastriggers | f rowsecurity | f