我正在学习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工具菜单中使用查询工具来获得相同的结果。
答案 0 :(得分:0)
在;
之后缺少CREATE DATABASE database
(也许给数据库起了更好的名字)。
答案 1 :(得分:0)
创建数据库就好了。但是,如果要在新数据库中创建对象,则必须连接到它。在任何客户端中,包括pgAdmin4。
您不能在事务内部运行CREATE DATABASE
。必须自己承担。一次执行多个命令会自动包装到pgAdmin中的单个事务中。
您必须自己执行CREATE DATABASE mydb;
(例如,仅选择该行并在连接到 any DB时按 F5 ,甚至是维护db“ postgres”。然后在pgadmin4主窗口/选项卡的对象浏览器中单击“数据库” ,按 F5 刷新视图,单击新数据库,使用Flash图标(在新窗口/标签中)打开一个新的查询工具,然后在其中执行脚本的其余部分。
psql脚本通过在同一会话中使用元命令\c
在创建新数据库后连接到新数据库进行管理。
除:
“数据库”不是数据库的好名字。
CREATE TYPE AS (...)
,但仅CREATE TABLE (...)
。否AS
。
通常,您不想使用数据类型CHAR(18)
。参见: