sql - 如何在 pgadmin4 上使用 SQL 的 DDL 创建 postrgresql 数据库?
问题描述
我正在学习 DDL 以使用 Postgresql 10 创建和定义 SQL 数据库。我在文件中有类似以下 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
我也尝试过直接从 PgAdmin 工具菜单中使用查询工具,结果相同。
解决方案
数据库创建得很好。但是如果你想在新数据库中创建对象,你必须连接到它。在任何客户端,包括 pgAdmin4。
而且您不能CREATE DATABASE
在事务内部运行。必须自己承担。一次执行多个命令会自动包装到 pgAdmin 中的单个事务中。
您必须CREATE DATABASE mydb;
自行执行(例如,仅选择该行并F5在连接到任何数据库时按下,甚至是维护数据库“postgres”。然后 在 pgadmin4 主窗口/选项卡的对象浏览器中单击“数据库” ,点击F5刷新视图,单击新数据库,打开一个带有 flash 图标的新查询工具(在新窗口/选项卡中)并在那里执行脚本的其余部分。
psql脚本通过在同一会话中创建新数据库后使用元命令\c
连接到新数据库进行管理。
旁白:
“数据库”不是数据库的好名字。
CREATE TYPE AS (...)
,但只是CREATE TABLE (...)
。没有AS
。
而且您通常不想使用数据类型CHAR(18)
。看:
推荐阅读
- python - 硒滚动到页面顶部
- bison - 野牛中的“其余线路”
- ios - 如果 supportsOnDeviceRecognition 为 true 并且离线模式可用,SFSpeechRecognizer 是否有限制?
- excel - 使用 Dictionary 方法匹配两个工作表中的数据 17,500 行需要 15 分钟
- python - 如何获得熊猫数据框中列表中每个元素的频率分布?
- javascript - clearTimeout 内有多个超时
- azure - 通过 Azure AD 使用客户端凭据保护 API
- node.js - 为什么 Promise 返回为
然后? - c++ - char指针不增加?
- spring - spring security - jwt 请求过滤器验证和验证会话,但主体为空