Таблица в реляционной базе данных очень похожа на таблицу на бумаге: она состоит из строк и столбцов. Количество и порядок столбцов фиксированы, и у каждого столбца есть имя. Количество строк является переменным — оно отражает, сколько данных хранится в данный момент. SQL не дает никаких гарантий относительно порядка строк в таблице. При чтении таблицы строки будут отображаться в неопределенном порядке, если сортировка не запрошена явно. 

Кроме того, SQL не присваивает строкам уникальные идентификаторы, поэтому в таблице может быть несколько совершенно одинаковых строк. Это следствие математической модели, лежащей в основе SQL, но обычно нежелательной. Позже в этой главе мы увидим, как решить эту проблему.

Каждый столбец имеет тип данных. Тип данных ограничивает набор возможных значений, которые могут быть присвоены столбцу, и присваивает семантику данным, хранящимся в столбце, чтобы их можно было использовать для вычислений. Например, столбец, объявленный как числовой, не будет принимать произвольные текстовые строки, а данные, хранящиеся в таком столбце, можно использовать для математических вычислений. Напротив, столбец, объявленный как тип строки символов, будет принимать данные почти любого типа, но он не поддается математическим вычислениям, хотя доступны другие операции, такие как конкатенация строк.

PostgreSQL включает значительный набор встроенных типов данных, которые подходят для многих приложений. Пользователи также могут определять свои собственные типы данных.

Некоторые из часто используемых типов данных предназначены integerдля целых чисел, numericвозможно, для дробных чисел, textдля символьных строк, dateдля дат, timeдля значений времени суток и timestampдля значений, содержащих как дату, так и время.

Чтобы создать таблицу, вы используете команду CREATE TABLE с подходящим названием . В этой команде вы указываете как минимум имя новой таблицы, имена столбцов и тип данных каждого столбца. Например:

CREATE TABLE my_first_table (
    first_column text,
    second_column integer
);

Это создает таблицу с именем my_first_tableиз двух столбцов. Первый столбец имеет имя first_columnи тип данных text; второй столбец имеет имя second_columnи тип integer. Имена таблиц и столбцов следуют синтаксису идентификаторов. Имена типов обычно также являются идентификаторами, но есть некоторые исключения. Обратите внимание, что список столбцов разделен запятыми и заключен в круглые скобки.

Конечно, предыдущий пример был сильно надуманным. Обычно вы должны давать имена своим таблицам и столбцам, которые сообщают, какие данные они хранят. Итак, давайте рассмотрим более реалистичный пример:

CREATE TABLE products ( 
    product_no integer, 
    text name, 
    price numeric 
);

( numericТип может хранить дробные компоненты, что характерно для денежных сумм.)

Существует ограничение на количество столбцов, которые может содержать таблица. В зависимости от типов столбцов оно составляет от 250 до 1600. Однако определение таблицы с таким количеством столбцов весьма необычно и часто сомнительно.

Если таблица вам больше не нужна, вы можете удалить ее с помощью команды DROP TABLE . Например:

DROP TABLE my_first_table;
DROP TABLE products;

Попытка удалить несуществующую таблицу является ошибкой. Тем не менее, в файлах сценариев SQL часто безоговорочно пытаются удалить каждую таблицу перед ее созданием, игнорируя любые сообщения об ошибках, так что сценарий работает независимо от того, существует таблица или нет. (Если хотите, вы можете использовать DROP TABLE IF EXISTSвариант, чтобы избежать сообщений об ошибках, но это не стандартный SQL.)