среда, 28 декабря 2011 г.

Основные команды для управления PostgreSQL

Все команды выполняются от имени postgres, поэтому логинимся в него:
$sudo su postgres

Как изменить root пароль в PostgreSQL?
$psql postgres postgres
Password: (oldpassword)

#ALTER USER postgres WITH PASSWORD ‘newpassword’;
#\q

$psql postgres postgres
Password: (tmppassword)

Изменение пароля для обычного пользователя происходит таким же образом. Пользователь root может поменять пароль любому пользователю.
#ALTER USER username WITH PASSWORD ‘password’;

Как посмотреть какая версия PostgreSQL запущена?
$psql test

Welcome to psql 9.0.1, the PostgreSQL interactive terminal.
Type:
\copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit

test=#select version();
version
—————————————————————————————————-
PostgreSQL 9.0.1 on i686-pc-linux-gnu, compiled by GCC gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3, 32-bit
(1 row)
test=#\q

Как создать пользователя в PostgreSQL?

$createuser username
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) n
Shall the new role be allowed to create more new roles? (y/n) n
CREATE ROLE

Как создать базу в PostgreSQL c владельцем username?
$createdb mydb -O username
CREATE DATABASE

Получаем список всех баз в Postgresql?
#\l
                                  List of databases
   Name    |  Owner   | Encoding |  Collation  |    Ctype    |   Access privileges   
-----------+----------+----------+-------------+-------------+-----------------------
 postgres  | postgres | UTF8     | ru_RU.UTF-8 | ru_RU.UTF-8 | 
 template0 | postgres | UTF8     | ru_RU.UTF-8 | ru_RU.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | ru_RU.UTF-8 | ru_RU.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 test      | postgres | UTF8     | ru_RU.UTF-8 | ru_RU.UTF-8 | 
 utp       | postgres | UTF8     | ru_RU.UTF-8 | ru_RU.UTF-8 | 
(5 rows)

Как удалить базу в PostgreSQL?
#\l
List of databases
                                  List of databases
   Name    |  Owner   | Encoding |  Collation  |    Ctype    |   Access privileges   
-----------+----------+----------+-------------+-------------+-----------------------
 postgres  | postgres | UTF8     | ru_RU.UTF-8 | ru_RU.UTF-8 | 
 template0 | postgres | UTF8     | ru_RU.UTF-8 | ru_RU.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | ru_RU.UTF-8 | ru_RU.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 test      | postgres | UTF8     | ru_RU.UTF-8 | ru_RU.UTF-8 | 
 utp       | postgres | UTF8     | ru_RU.UTF-8 | ru_RU.UTF-8 | 
(5 rows)

#DROP DATABASE test;
DROP DATABASE

Как найти самую большую таблицу в базе данных PostgreSQL?
#SELECT 
    relname AS "table_name", 
    relpages AS "size_in_pages" 
FROM 
    pg_class 
ORDER BY 
    relpages DESC 
LIMIT 
    1;

  TABLE_NAME    | size_in_pages 
----------------+---------------
 testtable1     |        299211

Результатом будет самая большая таблица (в примере testtable1) в страницах. Размер одной страницы равен 8KB (т.е. размер таблицы в примере — 2,3GB)

Как узнать размер всей базы данных PostgreSQL?
#SELECT pg_database_size( 'sampledb' );

в людском "виде":

#SELECT pg_size_pretty( pg_database_size( 'sampledb' ) );

Пользуемя встроенным хелпом к командам
Команда \? отобразит строку помощи для команда PSQL. \h CREATE покажет хелп для всех команд который начинаются с CREATE.
#\?
#\h CREATE
#\h CREATE INDEX

Как получить список всех таблиц в базе данный в Postgresql?
#\d
Для пустой базы вы получите сообщение “No relations found.”

Как узнать время выполнения запроса?
\timing — после выполения данной команды каждый последующий запрос будет показывать время выполнения.
#\timing
Timing is on.
#SELECT * from pg_catalog.pg_attribute ;
Time: 9.583 ms

Как посмотреть список доступных функций в PostgreSQL ?
Для того чтобы получить список доступных функций, скажите \df+
#\df+

Как отредактировать запрос к PostgreSQL в редакторе?
#\e

\e откроет редактор, в котором вы можете отредактировать запрос и сохранить его.

четверг, 15 декабря 2011 г.

Форвард пакетов "из мира в мир". Shorewall net2net

В одной из статей, я уже рассматривал настройку интернет шлюза с использованием shorewall (http://alah-my.blogspot.com/2010/08/blog-post.html)

Недавно столкнулся с необходимостью перенаправления пакетов с одного внешнего интернет-адреса на другой... Делается это так:

Есть сервер А с IP адресом: aa.аа.аа.аа
Есть сервер Б с IP адресом: bb.bb.bb.bb

Задача: все запросы из мира на аа.аа.аа.аа на порт 123 перенаправить на bb.bb.bb.bb на порт 321

1. Создаем правило в /etc/shorewall/rules:
$sudo mcedit /etc/shorewall/rules

DNAT       net         net:bb.bb.bb.bb:321       tcp     123        -        aa.aa.aa.aa

2. Добавляем правило маскарадинга в /etc/shorewall/masq
$sudo mcedit /etc/shorewall/masq

ppp0:bb.bb.bb.bb       -      aa.aa.aa.aa         tcp     321

3. Ну и не забываем проверить разрешения в /etc/shorewall/policy на форвард пакетов net2net:
$sudo mcedit /etc/shorewall/policy

#net     all      DROP        info