postgresql - postgres:命令行SQL:为什么要连接数据库甚至执行一些SQL命令,比如创建一个新数据库
问题描述
我想在 linux 机器的 postgresql 中的数据库级别上执行一些 SQL 命令。我想学命令行
例如:我想运行 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 命令,甚至创建另一个数据库
我觉得连接一个数据库是可以的,如果我们必须对那个数据库做一些相关的操作。比如添加表格等。
解决方案
CREATE DATABASE
是一条SQL 命令。
每个 SQL 命令都由服务器进程执行。
为了让 SQL 客户端能够与服务器通信,它必须连接到服务器。
由于 Postgres 架构,只能与数据库建立连接,因为处理客户端请求的后端进程与特定数据库绑定。
这就是为什么psql
(或任何其他 SQL 客户端)需要连接到某个数据库,即使您不对该数据库执行任何操作。
推荐阅读
- javascript - JS\TS - 无法在基于多个特殊字符的字符串中添加空格
- module - 两个球拍模块碰撞
- java - 提取文本java的模式
- vue.js - 我即将发布的 Vue 插件是否应该依赖于 Vue 本身?
- objective-c - 即使在运行 UI 测试时添加 @objcMembers 标签也无法从 objc 访问 swift 对象的功能
- mysql - 加入查询以获取匹配一列中 2 个值的记录
- c# - ML.NET:某些机器上出现奇怪的运行时错误
- python - Pandas 发现至少存在于两组中的值
- c# - 登录后从用户管理器获取用户
- c# - 如何修改 LINQ 请求的条件以删除另一个表中的用户?