sql - 是否可以创建一个 sql 脚本来创建数据库并用表填充它?

标签 sql windows postgresql

当使用 psql 命令行工具创建数据库时,我通常会做的事情(因为我以前见过它可以工作,但我真的不知道任何其他做事的方式)是为了:

  1. 首先创建一个新用户 U(CREATE USER U WITH PASSWORD 'U');
  2. 然后创建一个名为U的数据库(CREATE DATABASE U);
  3. 退出 psql 并使用 psql -U U 重新启动它
  4. 开始创建表(CREATE TABLE T())。

这带来的问题是它不能很好地与 SQL 脚本一起工作。我宁愿只有一个 .sql 文件,可以在其中创建完整的数据库。这可能吗?

谢谢

最佳答案

使用这样的 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

其中 inserting.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);

关于sql - 是否可以创建一个 sql 脚本来创建数据库并用表填充它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34123281/

相关文章:

c# - 登录不起作用

windows - 开发打印驱动程序

SQL - 为每个匹配给定条件的用户选择最后一个事件

postgresql - 使用docker-compose文件启动Tryton服务器

sql - 如何在 SQL Server 2012 中生成特定查询

mysql - 获取连接上唯一小部件的计数

sql - 如何在 BigQuery 中选择包含子字符串的所有列名称?

java - 如何将用户软件包加载到eclipse中以在启动时运行?如何运行?

c++ - std::tr1::shared_ptr 是否互斥?

sql - 空值的质量合并