我正在运行一个脚本,创建一个数据库,一些带有外键的表,并插入一些数据,但不知何故,创建表不工作,虽然它没有抛出任何错误:我转到pgAdmin,查找创建的表,但没有人...
当我复制脚本文本并在Query Tool中执行它时,它工作正常并创建了表。
你能解释一下我做错了什么吗?
脚本:
DROP DATABASE IF EXISTS test01 WITH (FORCE); --drops even if in use
CREATE DATABASE test01
WITH
OWNER = postgres
ENCODING = 'UTF8'
LC_COLLATE = 'German_Germany.1252'
LC_CTYPE = 'German_Germany.1252'
TABLESPACE = pg_default
CONNECTION LIMIT = -1
IS_TEMPLATE = False
;
CREATE TABLE customers
(
customer_id INT GENERATED ALWAYS AS IDENTITY,
customer_name VARCHAR(255) NOT NULL,
PRIMARY KEY(customer_id)
);
CREATE TABLE contacts
(
contact_id INT GENERATED ALWAYS AS IDENTITY,
customer_id INT,
contact_name VARCHAR(255) NOT NULL,
phone VARCHAR(15),
email VARCHAR(100),
PRIMARY KEY(contact_id),
CONSTRAINT fk_customer
FOREIGN KEY(customer_id)
REFERENCES customers(customer_id)
ON DELETE CASCADE
);
INSERT INTO customers(customer_name)
VALUES('BlueBird Inc'),
('Dolphin LLC');
INSERT INTO contacts(customer_id, contact_name, phone, email)
VALUES(1,'John Doe','(408)-111-1234','john.doe@bluebird.dev'),
(1,'Jane Doe','(408)-111-1235','jane.doe@bluebird.dev'),
(2,'David Wright','(408)-222-1234','david.wright@dolphin.dev');
我从Windows控制台调用脚本,如下所示:
"C:\Program Files\PostgreSQL\15\bin\psql.exe" -U postgres -f "C:\Users\my user name\Desktop\db_create.sql" postgres
我的脚本在记事本++中编辑,并按照here中的建议保存,编码设置为UTF-8,没有BOM
1条答案
按热度按时间bfhwhh0e1#
我看到您正在使用
-U postgres
命令行参数,并且还使用数据库名称作为最后一个参数(postgres
)。因此,所有SQL命令都是在连接到
postgres
数据库时执行的。当然,CREATE DATABASE
命令确实创建了test01
数据库,但CREATE TABLE
和INSERT INTO
不是为test01
数据库执行的,而是为postgres
数据库执行的,并且所有表都在postgres
数据库中,但不在test01
中。您需要将SQL脚本拆分为2个脚本(文件):第一个用于“创建数据库”,第二个用于的其余部分。
您需要像以前一样执行第一个脚本,例如
对于第二个,需要选择在第一步创建的数据库,如