当使用psql
命令行工具创建数据库时,我通常做的事情(因为我之前看到它工作,我真的不知道其他任何做事方式)是:
U
(CREATE USER U WITH PASSWORD 'U'
); U
(CREATE DATABASE U
); psql
并使用psql -U U
CREATE TABLE T()
)。这就产生了一个问题,即它对SQL脚本的效果不佳。我更喜欢只有一个.sql文件,可以在其中创建完整的数据库。这甚至可能吗?
由于
答案 0 :(得分:1)
使用这样的bash脚本:
#!/bin/bash
psqluser="U" # username
psqlpass="U" # password
psqldb="U" # db
sudo printf "CREATE USER $psqluser WITH PASSWORD '$psqlpass';\nCREATE DATABASE $psqldb WITH OWNER $psqluser;\nGRANT ALL PRIVILEGES ON database $psqldb TO $psqluser;" > createdb.sql
sudo -u postgres psql -f createdb.sql
echo "Populating inserting.sql"
sudo -u postgres psql -d $psqldb -f inserting.sql
其中inserted.sql类似于:
CREATE TABLE T (
id serial,
description text
);
ALTER TABLE T OWNER TO U;
INSERT INTO T(description) VALUES ('description 1');
INSERT INTO T(description) VALUES ('description 2');
ALTER TABLE ONLY T ADD CONSTRAINT id_pkey PRIMARY KEY (id);
答案 1 :(得分:1)
创建用户和数据库后,可以使用\connect
命令更改与新创建的数据库的连接。
create user arthur with password 'secret';
create database arthur_db owner arthur;
\connect dbname=arthur_db user=arthur password=secret
-- create the tables and populate them
create table items
(
id serial primary key,
item_name text
);
insert into items (item_name) values ('Towel'), ('Peanuts');
\connect
特定于psql
,因此上述内容仅适用于psql
,而不适用于其他SQL客户端。
如果您的用户更喜欢其他SQL客户端,则最好分割数据库和用户的创建以及设置数据库表的脚本。
您仍然可以使用包含这两个脚本的单个脚本,以便使用psql
的用户可以运行单个脚本。使用不同SQL客户端的用户可以手动运行这两个脚本并自行建立连接:
\i create_db_and_user.sql
\connect dbname=arthur_db user=arthur password=secret
\i setup_tables.sql