Postgres создает базу данных с использованием файла .sql

Итак, я пытался создать базу данных с помощью файла .sql. В первый раз, когда мы это делаем, он работает отлично, но он должен работать каждый раз. Если я сам создаю базу данных в postgres, сценарий работает отлично, но если я не создавал базу данных вручную, сценарий говорит: psql: имя_сценария: 40: ERROR: база данных dbname не существует.

Это код:

 --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

Пожалуйста, не обращайте внимания на комментарии, которые мы помещаем в скрипт, они на самом деле не важны.

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
0
0
4 952
2

Ответы 2

Вы можете добавить строку вверху вашего скрипта:

CREATE DATABASE dbname;

Документация PostgreSQL на CREATE DATABASE.

Кроме того, похоже, что ваш сценарий был создан с помощью pg_dump. pg_dump имеет множество опций и флагов, которые вы можете передать ему. Один из таких флагов - --create.

Из флага Документация PostgreSQL на pg_dump--create:

Begin the output with a command to create the database itself and reconnect to the created database. (With a script of this form, it doesn't matter which database in the destination installation you connect to before running the script.) If --clean is also specified, the script drops and recreates the target database before reconnecting to it.

В этом примере я предполагаю, что пользователь - postgres.

  1. войти как пользователь Postgres

    sudo -i -u postgres

  2. экспортируйте свою базу данных как .sql или .psql

    pg_dump -h 127.0.0.1 -p 5432 db_name > db_name.sql

  3. Файл находится в / вар / библиотека / postgresql /

  4. Переместите файл в каталог вашего проекта, например

    mv db_name.sql ../../../home/projects/web/My_App/backend/

  5. Выйдите из системы пользователя postgres и продолжайте как системный пользователь

  6. создать файл setup.sql для записи команд, которые будут выполняться в базе данных для создания таблицы и предоставления привилегий

    CREATE DATABASE db_name;
    GRANT ALL PRIVILEGES ON DATABASE db_name TO postgres;
    
  7. создайте сценарий bash для автоматизации процесса. файл можно назвать setup.sh и поместить в корневой каталог вашего проекта.

    sudo -u postgres bash -c "psql -h 127.0.0.1 -p 5432 < /home/projects/web/My_App/backend/setup.sql"
    
    sudo -U postgres bash -c "psql -h 127.0.0.1 -p 5432 -d db_name < /home/projects/web/My_App/backend/db_name.sql"
    
  8. Запустите сценарий bash

    bash setup.sh

Не забудьте изменить db_name и пути к файлам, чтобы они соответствовали именам, которые есть в вашей файловой системе.

Другие вопросы по теме