postgres: Командная строка SQL: зачем подключаться к базе данных даже для выполнения некоторых SQL команд, например, для создания новой базы данных - PullRequest
0 голосов
/ 05 мая 2020

Я хочу выполнить несколько SQL команд на уровне базы данных на postgresql на linux машине. Я хочу изучить командную строку

Например: я хочу запустить SQL. У меня есть созданная роль somesuperuser с использованием phppgadmin.

CREATE DATABASE new_database OWNER somesuperuser;

Я знаю, что postgres - это суперпользователь по умолчанию.

Я пробую

$ psql -U postgres
psql (11.2)
Type "help" for help.

postgres=# \c
You are now connected to database "postgres" as user "postgres".
postgres=# CREATE DATABASE new_database OWNER somesuperuser;

Здесь я может выполнить SQL.

Но если я попробую

$ psql -U somesuperuser   
psql: FATAL:  database "somesuperuser" does not exist

Итак, я наблюдаю, что

psql -U postgres

эквивалентно

psql -U postgres -d postgres

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

Я чувствую, что подключение к базе данных в порядке, если нам нужно что-то сделать операции с этой базой данных. например, добавить таблицы и т. д. c.

Ответы [ 2 ]

1 голос
/ 05 мая 2020

По умолчанию, если пользователь не указывает -d при подключении к psql, предполагается, что база данных по умолчанию для пользователя совпадает с именем пользователя. например, для вашего пользователя somesuperuser предполагается, что этот пользователь имеет базу данных по умолчанию с именем somesuperuser.

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

./psql -U somesuperuser -d postgres -p 5432 -c "CREATE DATABASE new_database OWNER somesuperuser"

Приведенная выше команда создаст базу данных new_database. После этого вы можете создать любую таблицу / объект в той же базе данных, используя команду ниже, например

./psql -U somesuperuser -d new_database -c "create table test (col1 int,col2 int)"

, или, если у вас есть файл test. sql, содержащий несколько ddl и dml для создания таблиц, вставьте в таблицы, тогда вы можете использовать команду ниже

./psql -U somesuperuser -d new_database -f /home/root/test.sql 

Раскрытие информации: я работаю для EnterpriseDB (EDB)

1 голос
/ 05 мая 2020

CREATE DATABASE - это SQL команда .

Каждая команда SQL выполняется серверным процессом.

Чтобы клиент SQL мог общаться с сервером, он должен подключиться к серверу.

Из-за архитектуры Postgres соединение может быть установлено только с базой данных, поскольку внутренний процесс, обрабатывающий запрос клиента, привязан к определенной базе данных c.

И поэтому psql (или любой другой клиент SQL) требует подключения к некоторой базе данных , даже если вы ничего не делаете с , что база данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...