所以我一直在尝试使用.sql文件创建数据库。 我们第一次这样做时,它会完美运行,但每次都必须运行。 如果我自己在postgres中创建数据库,则脚本可以正常工作,但是如果我没有手动创建数据库,则脚本会显示:psql: script_name :40:错误:数据库 dbname < / em>不存在。
这是代码:
--dit is een psql die eerst de database project dropt, vervolgens
--maakt hij opnieuw de database project aan.
--De de tabellen die hierbij worden gemaakt zijn:
--Pathway_C1, Eiwit_C1, Gen_C1, Gen_Go_C1, Go_termen_c1 en Gen_kegg_C1
--
-- PostgreSQL database dump
--
-- Dumped from database version 9.5.14
-- Dumped by pg_dump version 9.5.14
SET statement_timeout = 0;
SET lock_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET client_min_messages = warning;
SET row_security = off;
--
-- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: -
--
CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog;
--
-- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: -
--
COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';
SET default_tablespace = '';
SET default_with_oids = false;
DROP DATABASE project;
CREATE DATABASE project;
\c project
CREATE TABLE Pathway_C1 (
Kegg_co CHAR(8) NOT NULL,
PRIMARY KEY (Kegg_co)
);
CREATE TABLE Go_termen_C1 (
Go_nummer CHAR(10) NOT NULL,
Go_functie VARCHAR(1000) NOT NULL,
PRIMARY KEY (Go_nummer)
);
CREATE TABLE Gen_C1 (
Gen_ID INTEGER NOT NULL,
Gen_naam VARCHAR(50) NOT NULL,
PRIMARY KEY (Gen_ID)
);
CREATE TABLE Eiwit_C1 (
Eiwit_ID CHAR(12) NOT NULL,
Gen_ID INTEGER NOT NULL,
Eiwit_naam VARCHAR(500) NOT NULL,
Eiwit_Lengte INTEGER NOT NULL,
PRIMARY KEY (Eiwit_ID),
FOREIGN KEY (Gen_ID) REFERENCES Gen_C1(Gen_ID)
);
CREATE TABLE Gen_Kegg_C1 (
Gen_ID INTEGER NOT NULL,
Kegg_co CHAR(8) NOT NULL,
PRIMARY KEY (Gen_ID, Kegg_co),
FOREIGN KEY (Kegg_co) REFERENCES Pathway_C1(Kegg_co),
FOREIGN KEY (Gen_ID) REFERENCES Gen_C1(Gen_ID)
);
CREATE TABLE Gen_Go_C1 (
Gen_ID INTEGER NOT NULL,
Go_nummer CHAR(10) NOT NULL,
PRIMARY KEY (Gen_ID, Go_nummer),
FOREIGN KEY (Gen_ID) REFERENCES Gen_C1(Gen_ID),
FOREIGN KEY (Go_nummer) REFERENCES Go_termen_C1(Go_nummer)
);
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO username;
--
-- Name: SCHEMA public; Type: ACL; Schema: -; Owner: -
--
REVOKE ALL ON SCHEMA public FROM PUBLIC;
REVOKE ALL ON SCHEMA public FROM postgres;
GRANT ALL ON SCHEMA public TO postgres;
GRANT ALL ON SCHEMA public TO PUBLIC;
--
-- PostgreSQL database dump complete
--enter code here
请不要关注我们在脚本中添加的注释,它们并不是很重要。
答案 0 :(得分:-1)
您可以在脚本顶部添加一行:
CREATE DATABASE dbname;
CREATE DATABASE
上的PostgreSQL Documentation。
此外,您的脚本似乎是用pg_dump
创建的。 pg_dump
有很多选项和标志可以传递给它。这些标志之一是--create
。
通过PostgreSQL Documentation on the pg_dump --create
标志:
从输出开始使用命令创建数据库本身,并 重新连接到创建的数据库。 (使用这种形式的脚本, 与目标安装中的哪个数据库无关 在运行脚本之前先连接到。)如果还指定了--clean, 该脚本将在重新连接之前删除并重新创建目标数据库