postgresql 脚本不创建表,但pgAdmin创建表

qmelpv7a  于 2023-02-15  发布在  PostgreSQL
关注(0)|答案(1)|浏览(147)

我正在运行一个脚本,创建一个数据库,一些带有外键的表,并插入一些数据,但不知何故,创建表不工作,虽然它没有抛出任何错误:我转到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

bfhwhh0e

bfhwhh0e1#

我看到您正在使用-U postgres命令行参数,并且还使用数据库名称作为最后一个参数(postgres)。
因此,所有SQL命令都是在连接到postgres数据库时执行的。当然,CREATE DATABASE命令确实创建了test01数据库,但CREATE TABLEINSERT INTO不是为test01数据库执行的,而是为postgres数据库执行的,并且所有表都在postgres数据库中,但不在test01中。
您需要将SQL脚本拆分为2个脚本(文件):第一个用于“创建数据库”,第二个用于的其余部分。
您需要像以前一样执行第一个脚本,例如

psql.exe -U postgres -f "db_create_1.sql" postgres

对于第二个,需要选择在第一步创建的数据库,如

psql.exe -U postgres -f "db_create_2.sql" test01

相关问题