Как создать таблицу в pgadmin 4
Для создания таблиц применяется команда CREATE TABLE , после которой указывается название таблицы. Также с этой командой можно использовать ряд операторов, которые определяют столбцы таблицы и их атрибуты. Общий синтаксис создания таблицы выглядит следующим образом:
CREATE TABLE название_таблицы (название_столбца1 тип_данных атрибуты_столбца1, название_столбца2 тип_данных атрибуты_столбца2, . название_столбцаN тип_данных атрибуты_столбцаN, атрибуты_таблицы );
После названия таблицы в скобках перечисляется спецификация для всех столбцов. Причем для каждого столбца надо указывается название и тип данных, который он будет представлять. Тип данных определяет, какие данные (числа, строки и т.д.) может содержать столбец.
Например, создадим таблицу в базе данных через pgAdmin. Для этого вначале выберем в pgAdmin целевую базу данных, нажмем на нее правой кнопкой мыши и в контекстном меню выберем пункт Query Tool. :
После этого откроется поле для ввода кода на 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 , то есть хранит числа.
И после выполнения этой команды в выбранную базу данных будет добавлена таблица 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 )
- поставь docker-compose
- создай конфиг ~/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:
- Создай каталог для данных базы:
mkdir ~/path/to/compose/data
- Запусти все базы в докере:
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)