Как создать таблицу в pgadmin 4
Перейти к содержимому

Как создать таблицу в pgadmin 4

  • автор:

Как создать таблицу в pgadmin 4

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

CREATE TABLE название_таблицы (название_столбца1 тип_данных атрибуты_столбца1, название_столбца2 тип_данных атрибуты_столбца2, . название_столбцаN тип_данных атрибуты_столбцаN, атрибуты_таблицы );

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

Например, создадим таблицу в базе данных через pgAdmin. Для этого вначале выберем в pgAdmin целевую базу данных, нажмем на нее правой кнопкой мыши и в контекстном меню выберем пункт Query Tool. :

Создание таблицы в базе данных PostgreSQL

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

Далее в открывшееся в центральной части программы поле введем следующий набор выражений:

CREATE TABLE customers ( Id SERIAL PRIMARY KEY, FirstName CHARACTER VARYING(30), LastName CHARACTER VARYING(30), Email CHARACTER VARYING(30), Age INTEGER );

В данном случае в таблице Customers определяются пять столбцов: Id, FirstName, LastName, Age, Email. Первый столбец — Id представляет идентификатор клиента, он служит первичным ключом и поэтому имеет тип SERIAL . Фактически данный столбец будет хранить числовое значение 1, 2, 3 и т.д., которое для каждой новой строки будет автоматически увеличиваться на единицу.

Следующие три столбца представляют имя, фамилию клиента и его электронный адрес и имеют тип CHARACTER VARYING(30) , то есть представляют строку длиной не более 30 символов.

Последний столбец — Age представляет возраст пользователя и имеет тип INTEGER , то есть хранит числа.

Создание таблицы в pgAdmin

И после выполнения этой команды в выбранную базу данных будет добавлена таблица customers.

Удаление таблиц

Для удаления таблиц используется команда DROP TABLE , которая имеет следующий синтаксис:

DROP TABLE table1 [, table2, . ];

Например, удаление таблицы customers:

DROP TABLE customers;

Создание таблиц — Основы реляционных баз данных

В этом уроке мы поработаем с таблицами: будем создавать их, добавлять, модифицировать и удалять данные. Также разберем типы данных таблицы.

Создание базы данных

Прежде чем создать таблицу, создадим базу данных hexlet с помощью SQL (если вы еще этого не сделали). Для этого подключитесь к СУБД через psql . При этом не указывайте базу данных, чтобы подключиться к базе по умолчанию. Далее выполните следующие запросы:

DROP DATABASE hexlet; CREATE DATABASE hexlet; 

В примере выше два SQL запроса:

  • DROP DATABASE hexlet — удаляет базу данных с именем hexlet
  • CREATE DATABASE hexlet — создает базу данных с таким же именем

Базовые правила построения запросов:

  • Каждый запрос должен заканчиваться точкой с запятой. Иначе psql будет думать, что вы продолжаете вводить команды
  • Регистр не важен. Можно было написать drop database hexlet; . По традиции принято использовать верхний регистр для ключевых слов самого SQL. Это позволяет визуально разделять структуру запроса от данных внутри него. Последнее в примере — это имя базы данных, которое может быть произвольным

Если подключиться к той же базе данных, которую вы хотите удалить или пересоздать, то во время попытки удаления СУБД будет ругаться, что к базе есть активное соединение — ваше соединение. Поэтому важно подключиться к любой другой базе данных.

Команды createdb и createuser , которые мы разобрали в прошлых уроках, выполняют SQL-запросы внутри СУБД. Их сделали ради удобства первоначальной настройки, и чтобы использовать в скриптах автоматизации.

SQL поддерживает комментарии — строчка, которая начинается с двух дефисов. Комментарии игнорируются СУБД при построении запросов:

hexlet=> -- i am comment hexlet=> 

Нам удалось создать базу данных hexlet , поэтому можно переходить к созданию таблицы.

Создание таблиц

Таблица создается с помощью запроса CREATE TABLE :

-- Это один запрос, хоть и многострочный. -- Описание запроса заканчивается символом ; CREATE TABLE courses ( name varchar(255), slug varchar(255), lessons_count integer, body text ); 

Чтобы создать таблицу, необходимо указать ее имя, набор полей и их типы. В примере выше названия полей — это name , slug , lessons_count и body , а varchar(255) , integer и text — их типы.

Типы данных

У каждого поля в PostgreSQL определенный тип, который задается на этапе создания таблицы. Это значит, что значением этого поля могут быть только определенные данные. Если поле имеет числовой тип, то в него невозможно вставить строку, и наоборот. База данных выдаст ошибку при попытке выполнить подобный запрос.

-- Выполняем запрос на вставку передавая в lessons_count строку вместо числа ERROR: invalid input syntax for type integer: "wrong value" 

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

Строки

Для строк в базах данных в основном используются два типа:

  • varchar — для строк с ограничением максимальной длины
  • text — для строк без ограничения. Как правило, это полноценные тексты

В базах данных нельзя оставить первый тип без указания длины. Это связано с производительностью и эффективностью. Данные в базах данных физически хранятся на дисках в файлах. Быстрый доступ к этим данным возможен только тогда, когда у данных фиксированный размер. Это позволяет быстро перемещаться по ним и считать смещения.

Если размер данных не известен, то придется просматривать весь файл в поисках нужного значения. Чтобы избежать подобной ситуации, тип text хранится отдельно. Это тоже негативно влияет на скорость, но уже не так сильно. Если размер строки известен или он меньше какого-то значения, то предпочтительнее использовать varchar.

Имя Описание
character varying(n), varchar(n) строка ограниченной переменной длины
text строка неограниченной переменной длины
  • varchar. Полное название типа character varying (varchar может использоваться как псевдоним). Размер строки с таким типом указывается в скобках после названия типа, например, varchar(10). Это значит, что в поле с таким типом можно записать строку длиной до 10 символов.
  • text. Не требует указания размера и может содержать текст произвольной длины

Пример создания таблицы с такими типами:

CREATE TABLE blog_posts ( name varchar(80), body text ); 
Числа

Для чисел в основном используются два типа данных: integer и bigint. Какой конкретно указывать тип, зависит от потенциального потолка значения. Ниже указаны диапазоны, допустимые в рамках этих типов:

Имя Описание Диапазон
integer типичный выбор для целых чисел -2147483648 .. +2147483647
bigint целое в большом диапазоне -9223372036854775808 .. 9223372036854775807

Пример создания таблицы с такими типами:

CREATE TABLE users ( id bigint, age integer ); 
Даты

Типы для хранения дат отличаются друг от друга очень сильно, в первую очередь по решаемой задаче. Нам надо хранить день без конкретного времени? Это тип date. Нужно конкретный момент времени, тогда timestamp. Просто время без даты? Тогда time.

Имя Описание Наименьшее значение Наибольшее значение Точность
timestamp дата и время (без часового пояса) 4713 до н. э. 294276 н. э. 1 микросекунда
date дата (без времени суток) 4713 до н. э. 5874897 н. э. 1 день
time время суток (без даты) 00:00:00 24:00:00 1 микросекунда

Пример создания таблицы с такими типами:

CREATE TABLE events ( start_date date, -- имя поля может называться как тип данных time time, updated_at timestamp, created_at timestamp ); 

Хорошей практикой считается добавление и заполнение полей created_at и updated_at в каждую таблицу базы данных. С их помощью всегда можно узнать, когда запись создалась и обновилась.

Значения даты и времени принимаются практически в любом известном формате. Вот несколько примеров того, как можно задавать дату:

Пример Описание
1999-01-08 ISO 8601 (рекомендуемый формат)
January 8, 1999
Логический тип

Содержит всего два значения: true и false . Этот тип используется для флагов:

Имя Описание
boolean true или false (истина или ложь)

Пример создания таблицы с такими типами:

CREATE TABLE blog_posts ( -- флаг: опубликован? published boolean ); 

Состояние «true» может задаваться следующими значениями:

Для состояния «false» можно использовать следующие варианты:
Помимо типов данных для реальных значений, в базе существует специальное значение NULL , чтобы обозначать пустоту. Оно используется, когда у конкретного поля нет значения. Тип поля при этом не важен. Подробнее с NULL мы разберемся в следующих уроках.

Анализ структуры базы данных

Чтобы исследовать структуру таблиц в визуальном режиме, используется PgAdmin:

SQL для анализа структуры базы данных не существует. Если вы хотите посмотреть список таблиц и их структуру в базе данных, то придется использовать команды самого psql :

Просмотр списка таблиц базы данных hexlet

hexlet=> \d List of relations Schema | Name | Type | Owner --------+------------+-------+--------- public | courses | table | vagrant public | events | table | vagrant public | blog_posts | table | vagrant 

Здесь мы видим список таблиц в базе данных hexlet. Все что здесь отображается, было создано в этом уроке выше.

В первом столбце видим новое для нас понятие — schema. Это пространство имен, которое позволяет группировать таблицы, в различных ситуациях. На практике эта возможность используется редко, поэтому мы не обращаем на нее внимание. По умолчанию все таблицы публикуются в общей схеме public, которую можно не указывать.

Просмотр структуры таблицы courses

hexlet=> \d courses # public - обозначает схему по умолчанию Table "public.courses" Column | Type | Modifiers ---------------+------------------------+----------- name | character varying(255) | slug | character varying(255) | lessons_count | integer | body | text | 

В этом выводе показана структура таблицы courses. Здесь мы видим все имена полей и их типы.

Кроме перечисленных полезными могут оказаться следующие команды:

  • \l — список всех баз данных
  • \dt — список всех таблиц
  • \? — вывод справки

Удаление таблиц

Чтобы удалить таблицу, выполняется запрос DROP :

DROP TABLE courses; 

Будьте внимательны, так как удаление таблицы приводит к безвозвратной потере данных.

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов

Наши выпускники работают в компаниях:

Почему не могу создать таблицу через PGAdmin4?

подустал уже от этого нового pgadmin4. Ничего в нем не работает. Сейчас пытался создать таблицу и то не смог. Кто-нибудь знает что это такое? attribute ‘encoding’ of ‘psycopg2.extensions.QuotedString’ objects is not writable Саму БД через докер устанавливал PostgreSQL 9.6.8 on x86_64-pc-linux-gnu (Debian 9.6.8-1.pgdg80+1), compiled by gcc (Debian 4.9.2-10+deb8u1) 4.9.2, 64-bit pgadmin4 из репозитория Ubuntu Version2.1 CopyrightCopyright 2013 — 2018, The pgAdmin Development Team Python Version3.5.2 (default, Nov 23 2017, 16:37:01) [GCC 5.4.0 20160609] Flask Version0.10.1 Application ModeDesktop Current [email protected]

Отслеживать
задан 4 мар 2018 в 15:34
alexey2baranov alexey2baranov
Это проблема явно с pgAdmin.
– user181100
4 мар 2018 в 15:40

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Если закомментировать эти две строчки в /usr/share/pgadmin4/web/pgadmin/utils/driver/psycopg2/__init__.py, ошибка исчезает:

 if hasattr(adapted, 'encoding'): adapted.encoding = 'utf8' 

Отслеживать
ответ дан 31 мар 2018 в 5:55

    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.10.27.43697

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Не могу создать таблицу в pgadmin3

Установил базу данных postgresql13. установил pgadmin3. Создал базу данных.

Хочу создать таблицу в базе данных lesson, но вылазит ошибка. Мне нужно сделать именно так, как я это делал в mysql/phpmyadmin. Потому что там у меня работало, а postgre я раньше не использовал. Прошу помочь.

На phpmyadmin выглядела таблица, которую я создавал таким образом:

Имя Тип Длина/Значения По умолчанию Сравнение Атрибуты Null Индекс A_I Комментарии
user_id INT 11 Нет Primary A_I
username VARCHAR 60 Нет utf8_general_ci
password VARCHAR 60 Нет utf8_general_ci

На pgadmin3 таблица выглядит так:

Column Тип Длина/Значения Not Null Уникальный ключ Первичный ключ По умолчанию Комментарии
user_id integer 11 Да Да
username character varying 60 Да
password character varying 60 Да

Ошибка выглядит так:

Ошибка SQL: ERROR: syntax error at or near "(" LINE 1: CREATE TABLE "public"."signup" ("user_id" integer(11), "user. ^ В операторе: CREATE TABLE "public"."signup" ("user_id" integer(11), "username" character varying(60), "password" character varying(60), PRIMARY KEY ("user_id")) WITHOUT OIDS 

Пробовал через postgre в консоли, тоже самое:

postgres=# CREATE TABLE signup ( user_id int(11) PRIMARY KEY, username character varying(60), password character varying(60), ); ERROR: syntax error at or near "(" СТРОКА 2: user_id int(11) PRIMARY KEY, ^ 

Да, я вижу, что проблема где-то с последовательным типом данных. Я пробовал заменить на SERIAL , но в любом случае после создания таблицы не было доступа к бд/таблице. ЧЯДНТ?

//Тег freebsd будет лишним, но если это важно, то события происходят на ос freebsd в jail, все это на устройстве raspberry_pi. В моём случае pgadmin4/phppgadmin конфликтует с бинарными пакетами малины, которые были собраны заранее для nginx и другого добра, поэтому я поставил именно pgadmin3.

Clockwork ★★★★★
07.04.22 12:29:37 MSK

CREATE TABLE signup ( user_id BIGSERIAL PRIMARY KEY, username VARCHAR(60), password VARCHAR(60), ); 

Noob_Linux ★★★★
( 07.04.22 12:39:24 MSK )
Последнее исправление: Noob_Linux 07.04.22 12:47:06 MSK (всего исправлений: 3)

Таблицы надо создавать в скриптах миграции, а не в каких-то (веб)-мордах.

theNamelessOne ★★★★★
( 07.04.22 12:44:49 MSK )

Это в mysql уже много лет deprecated, если уже не выкинули.

gremlin_the_red ★★★★★
( 07.04.22 12:52:58 MSK )

Ругается же на скобку прямым текстом, убери (11), оно только на визуальное оформление влияло в mysql. Если что я pgsql ни разу вживую не видел.

firkax ★★★★★
( 07.04.22 12:55:13 MSK )
Ответ на: комментарий от firkax 07.04.22 12:55:13 MSK

Ругается же на скобку прямым текстом, убери (11)

Удваиваю! Иди в справку по PostgreSQL DDL для 13-той версии. Там все типы данных написаны.

pup_kin
( 07.04.22 14:48:04 MSK )
Ответ на: комментарий от pup_kin 07.04.22 14:48:04 MSK

Доступные типы данных я итак вижу в веб интерфейсе. Очевидно, что вместо INT используется integer .

Убрал ‘(11)’ и таблица создалась. Только я не уверен, что структуру таблицы создал правильно.

Clockwork ★★★★★
( 07.04.22 16:19:27 MSK ) автор топика
Ответ на: комментарий от Clockwork 07.04.22 16:19:27 MSK

Доступные типы данных я итак вижу в веб интерфейсе …

Строго говоря — (11) это часть спецификации типа.

pup_kin
( 07.04.22 18:56:20 MSK )
Последнее исправление: pup_kin 07.04.22 18:56:31 MSK (всего исправлений: 1)

Ответ на: комментарий от Clockwork 07.04.22 16:19:27 MSK

На структуру таблицы этот спецификатор display width влияния не оказывал, как и сейчас его отсутствие не оказывает.

gremlin_the_red ★★★★★
( 07.04.22 19:05:57 MSK )
Ответ на: комментарий от gremlin_the_red 07.04.22 19:05:57 MSK

Тогда я не правильно что-то делаю, потому-что страница не может сделать запись в бд.

При импорте базы из mysql вылазит вот такой error

signup.csv:2: ERROR: syntax error at or near ""1"" LINE 1: "1","abc","40bd001563085f3d5165329ea1ff58s2ybdbbeef" ^ Время выполнения: 1.595 мсек SQL-запрос выполнен. 

При выполнении скрипта sql такая картина:

signup.sql:10: ERROR: unrecognized configuration parameter "sql_mode" signup.sql:11: ERROR: unrecognized configuration parameter "autocommit" START TRANSACTION signup.sql:13: ERROR: unrecognized configuration parameter "time_zone" signup.sql:16: signup.sql:17: signup.sql:18: signup.sql:19: signup.sql:35: ERROR: syntax error at or near "`" LINE 1: CREATE TABLE `signup` ( ^ signup.sql:42: ERROR: syntax error at or near "`" LINE 1: INSERT INTO `signup` (`user_id`, `username`, `password`) VAL. ^ signup.sql:52: ERROR: syntax error at or near "`" LINE 1: ALTER TABLE `signup` ^ signup.sql:62: ERROR: syntax error at or near "`" LINE 1: ALTER TABLE `signup` ^ ROLLBACK signup.sql:65: signup.sql:66: signup.sql:67: Время выполнения: 14.655 мсек SQL-запрос выполнен. 

Clockwork ★★★★★
( 07.04.22 20:17:58 MSK ) автор топика
Последнее исправление: Clockwork 07.04.22 20:33:56 MSK (всего исправлений: 1)

Ответ на: комментарий от Clockwork 07.04.22 20:17:58 MSK

А ты пробовал сообщения об ошибках читать?

theNamelessOne ★★★★★
( 07.04.22 23:27:23 MSK )
Последнее исправление: theNamelessOne 07.04.22 23:27:47 MSK (всего исправлений: 1)

Ответ на: комментарий от Clockwork 07.04.22 20:17:58 MSK

signup.sql:10: ERROR: unrecognized configuration parameter «sql_mode»
signup.sql:11: ERROR: unrecognized configuration parameter «autocommit»
signup.sql:13: ERROR: unrecognized configuration parameter «time_zone»

Мусины слова. Можете забить или для шелковистости волос убрать/закомментировать.

CREATE TABLE `signup`
ALTER TABLE `signup`
INSERT INTO `signup` (`user_id`, `username`, `password`)

Тут тоже муськина фишка в виде символа ` его надо убрать. Но вот каким образом это сделать, решать вам, способов мульон. Обращаю внимание, что символ ` может внезапно встретиться к каком-то текстовом поле, поэтому вариант удаления всех символов ` не лучшая идея.

anc ★★★★★
( 08.04.22 00:44:40 MSK )
Ответ на: комментарий от theNamelessOne 07.04.22 12:44:49 MSK

вспоминая, джангу и эти вечно кривые миграции….

tz4678 ★★
( 08.04.22 01:10:45 MSK )

  1. поставь docker-compose
  2. создай конфиг ~/path/to/compose/docker-compose.yml:
version: '3.8' # для имен используем kebab, тк к имени через underscore добавляется название # каталога, в котором находится конфиг # Отключаем CoW для увеличения производительности: # $ chattr -C ./data services: postgres: container_name: postgres image: postgres:alpine env_file: .env networks: - internal ports: - '5432:5432' # always перезапустит даже остановленные через stop restart: unless-stopped volumes: - ./data/postgres:/var/lib/postgresql/data:rw pgadmin: container_name: pgadmin image: dpage/pgadmin4 depends_on: - postgres env_file: .env networks: - internal ports: - "5050:80" restart: unless-stopped volumes: - ./data/pgadmin:/var/lib/pgadmin:rw redis: container_name: redis image: redis:alpine networks: - internal ports: - "6379:6379" restart: unless-stopped volumes: - ./data/redis:/var/lib/redis:rw # Постоянное хранение данных # Именнованные вольюмы хранятся в /var/lib/docker/volumes, но так как снапшоты # /var/lib/docker не делаются, то критичные данные лучше хранить в ./data # volumes: # pgadmin-data: # pgdata: # redis-data: networks: internal: 
  1. Создай каталог для данных базы:
mkdir ~/path/to/compose/data 
  1. Запусти все базы в докере:
cd ~/path/to/compose docker-compose up -d # обратная операция docker-compose down 

tz4678 ★★
( 08.04.22 01:17:07 MSK )
Ответ на: комментарий от tz4678 08.04.22 01:17:07 MSK

~ ➜ cat ~/work/compose/devstack/.env POSTGRES_USER=docker POSTGRES_PASSWORD=password POSTGRES_DB=db PGADMIN_DEFAULT_EMAIL=pgadmin4@pgadmin.org PGADMIN_DEFAULT_PASSWORD=admin 

tz4678 ★★
( 08.04.22 01:18:10 MSK )
Ответ на: комментарий от tz4678 08.04.22 01:18:10 MSK

Это решит твои проблемы с несовместимостью всего и вся

tz4678 ★★
( 08.04.22 01:18:54 MSK )
Ответ на: комментарий от tz4678 08.04.22 01:18:54 MSK

Бесполезный ответ, так как у автора вопроса проблема из-несовместимости синтаксиса SQL и типов данных между MySQL и PostgreSQL.

Что можно сделать. В pgpAdmin есть мастер создания таблиц, который позволяет не писать SQL оператор создания таблицы (получившийся оператор можно посмотреть по Scripts — Create). Правой кнопкой мыши по Tables, затем Create. Обязательно посмотреть описание типов данных PostgreSQL. Есть на русском языке. Типы целое число и строка можно без особого ущерба для работы указывать без точности: integer и text. Обратить внимание на типы даты-времени. Если в названиях таблиц и колонок есть большие буквы, то в SQL операторах помещать их в » » (а » используются для строковых значений).

В Linux по умолчанию ставится pgAdnin3, но вообще-то, есть смысл использовать pgAdmin4, особенно если дисплей с мелким пикселом. Хотя на вышеприведённые рекомендации это не влияет.

Partisan ★★★★
( 08.04.22 09:53:48 MSK )
Ответ на: комментарий от Partisan 08.04.22 09:53:48 MSK

ну то что он через жопу софт ставит нужно, конечно, оставить без внимания, пускай страдает как дебиано-петухи с докерофобией?

tz4678 ★★
( 08.04.22 10:41:57 MSK )
Последнее исправление: tz4678 08.04.22 10:42:08 MSK (всего исправлений: 1)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *