Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как создать базу данных postrgresql с помощью SQL DDL на pgadmin4?

Автор вопроса: DiegoОтветов: 2

Я изучаю DDL для создания и определения базы данных SQL с помощью Postgresql 10. У меня есть что-то вроде следующего кода SQL в файле .sql, и я хочу ввести его в psql или PgAdmin 4, просто чтобы проверить синтаксис и увидеть структура базы данных:

CREATE DATABASE database;

CREATE TYPE t_name AS
(      first    VARCHAR(30),
       last     VARCHAR(60)
);

CREATE TABLE telephone_m
(   tnumber  VARCHAR(15) NOT NULL UNIQUE
);

CREATE TABLE people
(   curp        CHAR(18)    NOT NULL PRIMARY KEY,
    pname       t_name      NOT NULL,
    birth_date  DATE        NOT NULL,
    telephone_m VARCHAR(15) REFERENCES telephone_m
);

CREATE TABLE clients
(   curp        CHAR(18)    NOT NULL PRIMARY KEY,
    cid         SERIAL      NOT NULL REFERENCES cards,
    clocation   VARCHAR(29)
)   INHERITS (people);

CREATE TABLE cards
(   cid         BIGSERIAL   NOT NULL PRIMARY KEY,
    curp        CHAR(18)    NOT NULL REFERENCES clients,
    trips       SMALLINT,
    distance    NUMERIC,
    points      NUMERIC
);

CREATE TABLE drivers
(   curp        CHAR(18)    NOT NULL PRIMARY KEY,
    rfc         CHAR(22)    NOT NULL UNIQUE,
    adress      t_adress    NOT NULL
)   INHERITS (people);

Я пробовал в PgAdmin 4 щелкнуть правой кнопкой мыши новую базу данных -> CREATE Script, он открывает редактор запросов, я копирую свой код и выполняю его, но он возвращает:

ERROR:  CREATE DATABASE cannot be executed from a function or multi-command string
SQL state: 25001

Я также пытался использовать Query Tool непосредственно из меню инструментов PgAdmin с теми же результатами.

  • Эрвин правильно понял в своем ответе, но я также хотел бы указать, что вы создаете базу данных (база данных с плохим названием), но все таблицы, которые вы создаете, не находятся в этой базе данных. После создания вам нужно будет к нему подключиться. Jeremy 06.09.2019

postgresqlsqlddlpgadmin-4

Ответы

Ответ 1 · рейтинг 3 · Erwin Brandstetter

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

И вы не можете запустить CREATE DATABASE внутри транзакции. Должен быть совершен самостоятельно. Выполнение нескольких команд одновременно автоматически включается в одну транзакцию в pgAdmin.

Вы должны выполнить CREATE DATABASE mydb; самостоятельно (например, выбрав только эту строку и нажав F5 при подключении к любой БД, даже к обслуживающей БД "postgres". Затем нажмите в "Базы данных" в обозревателе объектов в главном окне/вкладке pgadmin4 нажмите F5, чтобы обновить представление, щелкните новую базу данных, откройте новый инструмент запросов с помощью значок вспышки (в новом окне / вкладке) и выполните там остальную часть вашего скрипта.

Сценарии psql управляются с помощью метакоманды \c для подключения к новую базу данных после ее создания в том же сеансе.

В стороне:

"база данных" не является хорошим названием для базы данных.

CREATE TYPE AS (...), а просто CREATE TABLE (...). Нет AS.

И обычно вы не хотите использовать тип данных CHAR(18). Видеть:

Ответ 2 · Islingre

После CREATE DATABASE database отсутствует ; (и, возможно, дать БД лучшее имя).

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы