PostgreSQL 데이터베이스의 모든 테이블을 삭제하려면 어떻게해야합니까?
명령 줄에서 작업하면서 PostgreSQL의 모든 테이블을 삭제하려면 어떻게해야합니까?
나는 하지 않습니다 단지 모든 테이블과 그 안에있는 모든 데이터, 데이터베이스 자체를 삭제하고 싶습니다.
모든 테이블이 단일 스키마에있는 경우이 접근 방식이 작동 할 수 있습니다 (아래 코드에서는 스키마 이름이라고 가정 함 public
).
DROP SCHEMA public CASCADE;
CREATE SCHEMA public;
PostgreSQL 9.3 이상을 사용하는 경우 기본 권한을 복원해야 할 수도 있습니다.
GRANT ALL ON SCHEMA public TO postgres;
GRANT ALL ON SCHEMA public TO public;
다음과 같은 SQL 스크립트를 생성하는 쿼리를 작성할 수 있습니다.
select 'drop table "' || tablename || '" cascade;' from pg_tables;
또는:
select 'drop table if exists "' || tablename || '" cascade;' from pg_tables;
이전 문장의 캐스케이드 옵션으로 인해 일부 테이블이 자동으로 삭제되는 경우
또한 주석에 명시된대로 스키마 이름으로 삭제할 테이블을 필터링 할 수 있습니다.
select 'drop table if exists "' || tablename || '" cascade;'
from pg_tables
where schemaname = 'public'; -- or any other schema
그리고 그것을 실행하십시오.
Glorious COPY + PASTE도 작동합니다.
이 글 (2014 년 1 월) 현재 가장 많이 받아 들여지는 답변은 다음과 같습니다.
drop schema public cascade;
create schema public;
이것은 작동하지만 공개 스키마를 원래 상태로 복원하려는 경우 작업을 완전히 수행하지 못합니다. PostgreSQL 9.3.1 용 pgAdmin III에서 이런 방식으로 생성 된 "공용"스키마를 클릭하고 "SQL 창"을 보면 다음이 표시됩니다.
-- Schema: public
-- DROP SCHEMA public;
CREATE SCHEMA public
AUTHORIZATION postgres;
그러나 대조적으로 새로운 데이터베이스에는 다음이 포함됩니다.
-- Schema: public
-- DROP SCHEMA public;
CREATE SCHEMA public
AUTHORIZATION postgres;
GRANT ALL ON SCHEMA public TO postgres;
GRANT ALL ON SCHEMA public TO public;
COMMENT ON SCHEMA public
IS 'standard public schema';
데이터베이스 테이블 (web2py)을 생성하는 파이썬 웹 프레임 워크를 사용하는 저에게는 전자를 사용하여 문제가 발생했습니다.
<class 'psycopg2.ProgrammingError'> no schema has been selected to create in
그래서 내 마음에 완전히 정답은 다음과 같습니다.
DROP SCHEMA public CASCADE;
CREATE SCHEMA public;
GRANT ALL ON SCHEMA public TO postgres;
GRANT ALL ON SCHEMA public TO public;
COMMENT ON SCHEMA public IS 'standard public schema';
또한 pgAdmin III에서 이러한 명령을 실행하기 위해 Query 도구 (돋보기 아이콘 "Execute abritrary SQL queries")를 사용하거나 플러그인-> PSQL 콘솔을 사용할 수 있습니다.
다음을 사용하여 모든 테이블을 삭제할 수 있습니다.
DO $$ DECLARE
r RECORD;
BEGIN
-- if the schema you operate on is not "current", you will want to
-- replace current_schema() in query with 'schematodeletetablesfrom'
-- *and* update the generate 'DROP...' accordingly.
FOR r IN (SELECT tablename FROM pg_tables WHERE schemaname = current_schema()) LOOP
EXECUTE 'DROP TABLE IF EXISTS ' || quote_ident(r.tablename) || ' CASCADE';
END LOOP;
END $$;
IMO는 모든 보조금 drop schema public
을 다시 schema
만들고 복원 할 필요가 없기 때문에 .
이것은 외부 스크립팅 언어가 필요하지 않으며 생성 된 SQL을 인터프리터에 다시 복사하여 붙여 넣을 필요가 없다는 추가 보너스입니다.
삭제하려는 모든 항목이 동일한 사용자의 소유인 경우 다음을 사용할 수 있습니다.
drop owned by the_user;
이것은 사용자가 소유 한 모든 것을 삭제 합니다.
(그래서, 정말 그 구체화 된 뷰, 뷰, 시퀀스, 트리거, 스키마, 기능, 유형, 집계, 연산자, 도메인 등 포함 모든 ) the_user
(생성 =) 소유합니다.
the_user
실제 사용자 이름 으로 바꿔야 합니다. 현재 "현재 사용자"에 대한 모든 항목을 삭제할 수있는 옵션이 없습니다. 다가오는 9.5 버전에는 옵션이 drop owned by current_user
있습니다.
자세한 내용은 http://www.postgresql.org/docs/current/static/sql-drop-owned.html
위의 Pablo에 따라 경우와 관련하여 특정 스키마에서 삭제하려면 다음을 수행하십시오.
select 'drop table "' || tablename || '" cascade;'
from pg_tables where schemaname = 'public';
drop schema public cascade;
트릭을해야합니다.
Pablo와 LenW에 이어 준비와 실행 모두를 수행하는 한 줄짜리 글이 있습니다.
psql -U $PGUSER $PGDB -t -c "select 'drop table \"' || tablename || '\" cascade;' from pg_tables where schemaname = 'public'" | psql -U $PGUSER $PGDB
NB : 중 하나를 설정하거나 대체 $PGUSER
하고 $PGDB
값으로 당신이 원하는
PL / PGSQL 절차 언어가 설치되어 있는 경우 다음을 사용하여 쉘 / Perl 외부 스크립트없이 모든 항목을 제거 할 수 있습니다.
DROP FUNCTION IF EXISTS remove_all();
CREATE FUNCTION remove_all() RETURNS void AS $$
DECLARE
rec RECORD;
cmd text;
BEGIN
cmd := '';
FOR rec IN SELECT
'DROP SEQUENCE ' || quote_ident(n.nspname) || '.'
|| quote_ident(c.relname) || ' CASCADE;' AS name
FROM
pg_catalog.pg_class AS c
LEFT JOIN
pg_catalog.pg_namespace AS n
ON
n.oid = c.relnamespace
WHERE
relkind = 'S' AND
n.nspname NOT IN ('pg_catalog', 'pg_toast') AND
pg_catalog.pg_table_is_visible(c.oid)
LOOP
cmd := cmd || rec.name;
END LOOP;
FOR rec IN SELECT
'DROP TABLE ' || quote_ident(n.nspname) || '.'
|| quote_ident(c.relname) || ' CASCADE;' AS name
FROM
pg_catalog.pg_class AS c
LEFT JOIN
pg_catalog.pg_namespace AS n
ON
n.oid = c.relnamespace WHERE relkind = 'r' AND
n.nspname NOT IN ('pg_catalog', 'pg_toast') AND
pg_catalog.pg_table_is_visible(c.oid)
LOOP
cmd := cmd || rec.name;
END LOOP;
FOR rec IN SELECT
'DROP FUNCTION ' || quote_ident(ns.nspname) || '.'
|| quote_ident(proname) || '(' || oidvectortypes(proargtypes)
|| ');' AS name
FROM
pg_proc
INNER JOIN
pg_namespace ns
ON
(pg_proc.pronamespace = ns.oid)
WHERE
ns.nspname =
'public'
ORDER BY
proname
LOOP
cmd := cmd || rec.name;
END LOOP;
EXECUTE cmd;
RETURN;
END;
$$ LANGUAGE plpgsql;
SELECT remove_all();
"psql"프롬프트에서 입력하는 대신 파일에 복사 한 다음 "--file"또는 "-f"옵션을 사용하여 파일을 psql에 입력으로 전달하는 것이 좋습니다.
psql -f clean_all_pg.sql
신용이 필요한 곳에 신용 : 함수를 작성했지만 쿼리 (또는 적어도 첫 번째 쿼리)는 몇 년 전에 pgsql 메일 링리스트 중 하나에있는 누군가가 보낸 것이라고 생각합니다. 정확히 언제 또는 어느 것을 기억하지 마십시오.
생성 된 SQL 명령을 하나의 단일 문자열로 반환하는 편의를 위해 Pablo의 대답을 약간 수정했습니다.
select string_agg('drop table "' || tablename || '" cascade', '; ')
from pg_tables where schemaname = 'public'
pgAdmin에서이 스크립트를 사용하십시오.
DO $$
DECLARE
brow record;
BEGIN
FOR brow IN (select 'drop table "' || tablename || '" cascade;' as table_name from pg_tables where schemaname = 'public') LOOP
EXECUTE brow.table_name;
END LOOP;
END; $$
어쨌든 모든 테이블을 핵으로 만들고 싶다면 모든 테이블을 단일 명령문에 넣어 CASCADE와 같은 멋진 기능을 생략 할 수 있습니다. 이것은 또한 실행을 더 빠르게 만듭니다.
SELECT 'TRUNCATE TABLE ' || string_agg('"' || tablename || '"', ', ') || ';'
FROM pg_tables WHERE schemaname = 'public';
직접 실행 :
DO $$
DECLARE tablenames text;
BEGIN
tablenames := string_agg('"' || tablename || '"', ', ')
FROM pg_tables WHERE schemaname = 'public';
EXECUTE 'TRUNCATE TABLE ' || tablenames;
END; $$
해당 TRUNCATE
하는 경우 DROP
로 교체하십시오 .
혹시라도 ... Postgresql 데이터베이스를 정리하는 간단한 Python 스크립트
import psycopg2
import sys
# Drop all tables from a given database
try:
conn = psycopg2.connect("dbname='akcja_miasto' user='postgres' password='postgres'")
conn.set_isolation_level(0)
except:
print "Unable to connect to the database."
cur = conn.cursor()
try:
cur.execute("SELECT table_schema,table_name FROM information_schema.tables WHERE table_schema = 'public' ORDER BY table_schema,table_name")
rows = cur.fetchall()
for row in rows:
print "dropping table: ", row[1]
cur.execute("drop table " + row[1] + " cascade")
cur.close()
conn.close()
except:
print "Error: ", sys.exc_info()[1]
복사 한 후에는 파이썬이 그것에 의존하기 때문에 들여 쓰기가 올바른지 확인하십시오.
string_agg 함수를 사용하여 DROP TABLE에 적합한 쉼표로 구분 된 목록을 만들 수 있습니다. bash 스크립트에서 :
#!/bin/bash
TABLES=`psql $PGDB -t --command "SELECT string_agg(table_name, ',') FROM information_schema.tables WHERE table_schema='public'"`
echo Dropping tables:${TABLES}
psql $PGDB --command "DROP TABLE IF EXISTS ${TABLES} CASCADE"
데이터를 삭제하려면 (테이블 삭제가 아님) :
-- Truncate tables and restart sequnces
SELECT 'TRUNCATE TABLE "' || table_schema || '"."' || table_name || '" RESTART IDENTITY CASCADE;'
FROM information_schema.tables
WHERE table_catalog = '<database>' AND table_schema = '<schema>';
또는 드롭 테이블을 원한다면 다음 SQL을 사용할 수 있습니다.
-- For tables
SELECT 'DROP TABLE "' || table_schema || '"."' || table_name || '" CASCADE;'
FROM information_schema.tables
WHERE table_catalog = '<database>' AND table_schema = '<schema>';
-- For sequences
SELECT 'DROP SEQUENCE d_a_seq "' || sequence_schema || '"."' || sequence_name || '";'
FROM information_schema.sequences
WHERE sequence_catalog = '<database>' AND sequence_schema = '<schema>';
테이블과 시퀀스를 삭제해야합니다. 여기에 효과가 있습니다.
psql -qAtX -c "select 'DROP TABLE IF EXISTS ' || quote_ident(table_schema) || '.' || quote_ident(table_name) || ' CASCADE;' FROM information_schema.tables where table_type = 'BASE TABLE' and not table_schema ~ '^(information_schema|pg_.*)$'" | psql -qAtX
psql -qAtX -c "select 'DROP SEQUENCE IF EXISTS ' || quote_ident(relname) || ' CASCADE;' from pg_statio_user_sequences;" | psql -qAtX
이 명령을 실행하기 전에 당신은에 / 스와 sudo를해야 할 수도 postgres
사용자 또는 (수출 관련 세부 사항 PGHOST
, PGPORT
, PGUSER
과 PGPASSWORD
) 다음export PGDATABASE=yourdatabase
현재 데이터베이스의 모든 테이블을 파괴하기위한 Rails의 레이크 작업
namespace :db do
# rake db:drop_all_tables
task drop_all_tables: :environment do
query = <<-QUERY
SELECT
table_name
FROM
information_schema.tables
WHERE
table_type = 'BASE TABLE'
AND
table_schema NOT IN ('pg_catalog', 'information_schema');
QUERY
connection = ActiveRecord::Base.connection
results = connection.execute query
tables = results.map do |line|
table_name = line['table_name']
end.join ", "
connection.execute "DROP TABLE IF EXISTS #{ tables } CASCADE;"
end
end
나는 그의 유일한 기본값 인 테이블 유형 "base table"을 존중하기 때문에 jamie의 bash 메소드를 개선했습니다.
다음 bash 코드는 먼저 뷰를 삭제하고 나머지는 모두 삭제합니다.
#!/usr/bin/env bash
PGDB="yourDB"
# By exporting user & pass your dont need to interactively type them on execution
export PGUSER="PGusername"
export PGPASSWORD="PGpassword"
VIEWS=`psql -d $PGDB -t --command "SELECT string_agg(table_name, ',') FROM information_schema.tables WHERE table_schema='public' AND table_type='VIEW'"`
BASETBLS=`psql -d $PGDB -t --command "SELECT string_agg(table_name, ',') FROM information_schema.tables WHERE table_schema='public' AND table_type='BASE TABLE'"`
echo Dropping views:${VIEWS}
psql $PGDB --command "DROP VIEW IF EXISTS ${VIEWS} CASCADE"
echo Dropping tables:${BASETBLS}
psql $PGDB --command "DROP TABLE IF EXISTS ${BASETBLS} CASCADE"
Windows 배치 파일에서 :
@echo off
FOR /f "tokens=2 delims=|" %%G IN ('psql --host localhost --username postgres --command="\dt" YOUR_TABLE_NAME') DO (
psql --host localhost --username postgres --command="DROP table if exists %%G cascade" sfkb
echo table %%G dropped
)
참고 : 내 대답은 실제로 테이블 및 기타 데이터베이스 개체를 삭제하는 것입니다. 에 대한 모든 데이터를 삭제 에 테이블, 즉 모든 테이블을 절단 , Endre를 두 달 후에 이와 비슷하게 잘 실행 (직접 실행) 문을 제공하고 있습니다.
그냥 할 수없는 경우에 DROP SCHEMA public CASCADE;
, DROP OWNED BY current_user;
여기에 거래 안전 (당신이 사이를 넣을 수 있습니다 예이다 내가 쓴 독립 실행 형 SQL 스크립트, 또는 뭔가 BEGIN;
및 중 ROLLBACK;
단지 시험에 밖으로 나 COMMIT;
실제로으로 행동 할) "모든"데이터베이스 개체를 정리합니다. 응용 프로그램이 사용하는 데이터베이스에 사용 된 모든 개체 또는 다음과 같이 추가 할 수 있습니다.
- 테이블에 대한 트리거
- 테이블에 대한 제약 (FK, PK
CHECK
,,UNIQUE
) - 지수
VIEW
s (정상 또는 구체화)- 테이블
- 시퀀스
- 기능 / 절차 (
pg_proc.proisagg
아마도 존중되어야 함 ) public
"우리"가 소유 한 모든 기본 (즉 , DB 내부) 스키마 : 스크립트는 "데이터베이스 수퍼 유저가 아님"으로 실행할 때 유용합니다. 수퍼 유저는 모든 스키마 를 삭제할 수 있습니다 (정말 중요한 스키마는 여전히 명시 적으로 제외됩니다).- 확장 프로그램 (사용자가 제공했지만 일반적으로 일부러 그대로 둡니다)
삭제되지 않음 (일부는 의도적이며 일부는 DB에 예제가 없었기 때문에) :
public
스키마 (그들 확장 제공하는 물건에 대한 예)- 집계 함수
- 데이터 정렬 및 기타 로케일 항목
- 이벤트 트리거
- 텍스트 검색 항목,… ( 내가 놓친 다른 항목 은 여기 를 참조 하세요 )
- 역할 또는 기타 보안 설정
- 복합 유형
- 토스트 테이블
- FDW 및 외국 테이블
이것은 복원하려는 덤프가 복원하려는 데이터베이스와 다른 데이터베이스 스키마 버전 (예 : Debian , Flyway 또는 Liquibase / DB-Manul 사용) 인 경우에 매우 유용합니다 dbconfig-common
.
나는 또한 누군가가 관심을 가질 경우를 대비하여 "두 테이블을 제외한 모든 것과 그 테이블에 속한 것"을 삭제하는 버전을 가지고 있습니다. 차이가 작습니다. 필요한 경우 저에게 연락하십시오.
SQL
-- Copyright © 2019
-- mirabilos <t.glaser@tarent.de>
--
-- Provided that these terms and disclaimer and all copyright notices
-- are retained or reproduced in an accompanying document, permission
-- is granted to deal in this work without restriction, including un‐
-- limited rights to use, publicly perform, distribute, sell, modify,
-- merge, give away, or sublicence.
--
-- This work is provided “AS IS” and WITHOUT WARRANTY of any kind, to
-- the utmost extent permitted by applicable law, neither express nor
-- implied; without malicious intent or gross negligence. In no event
-- may a licensor, author or contributor be held liable for indirect,
-- direct, other damage, loss, or other issues arising in any way out
-- of dealing in the work, even if advised of the possibility of such
-- damage or existence of a defect, except proven that it results out
-- of said person’s immediate fault when using the work as intended.
-- -
-- Drop everything from the PostgreSQL database.
DO $$
DECLARE
r RECORD;
BEGIN
-- triggers
FOR r IN (SELECT pns.nspname, pc.relname, pt.tgname
FROM pg_trigger pt, pg_class pc, pg_namespace pns
WHERE pns.oid=pc.relnamespace AND pc.oid=pt.tgrelid
AND pns.nspname NOT IN ('information_schema', 'pg_catalog', 'pg_toast')
AND pt.tgisinternal=false
) LOOP
EXECUTE format('DROP TRIGGER %I ON %I.%I;',
r.tgname, r.nspname, r.relname);
END LOOP;
-- constraints #1: foreign key
FOR r IN (SELECT pns.nspname, pc.relname, pcon.conname
FROM pg_constraint pcon, pg_class pc, pg_namespace pns
WHERE pns.oid=pc.relnamespace AND pc.oid=pcon.conrelid
AND pns.nspname NOT IN ('information_schema', 'pg_catalog', 'pg_toast')
AND pcon.contype='f'
) LOOP
EXECUTE format('ALTER TABLE ONLY %I.%I DROP CONSTRAINT %I;',
r.nspname, r.relname, r.conname);
END LOOP;
-- constraints #2: the rest
FOR r IN (SELECT pns.nspname, pc.relname, pcon.conname
FROM pg_constraint pcon, pg_class pc, pg_namespace pns
WHERE pns.oid=pc.relnamespace AND pc.oid=pcon.conrelid
AND pns.nspname NOT IN ('information_schema', 'pg_catalog', 'pg_toast')
AND pcon.contype<>'f'
) LOOP
EXECUTE format('ALTER TABLE ONLY %I.%I DROP CONSTRAINT %I;',
r.nspname, r.relname, r.conname);
END LOOP;
-- indicēs
FOR r IN (SELECT pns.nspname, pc.relname
FROM pg_class pc, pg_namespace pns
WHERE pns.oid=pc.relnamespace
AND pns.nspname NOT IN ('information_schema', 'pg_catalog', 'pg_toast')
AND pc.relkind='i'
) LOOP
EXECUTE format('DROP INDEX %I.%I;',
r.nspname, r.relname);
END LOOP;
-- normal and materialised views
FOR r IN (SELECT pns.nspname, pc.relname
FROM pg_class pc, pg_namespace pns
WHERE pns.oid=pc.relnamespace
AND pns.nspname NOT IN ('information_schema', 'pg_catalog', 'pg_toast')
AND pc.relkind IN ('v', 'm')
) LOOP
EXECUTE format('DROP VIEW %I.%I;',
r.nspname, r.relname);
END LOOP;
-- tables
FOR r IN (SELECT pns.nspname, pc.relname
FROM pg_class pc, pg_namespace pns
WHERE pns.oid=pc.relnamespace
AND pns.nspname NOT IN ('information_schema', 'pg_catalog', 'pg_toast')
AND pc.relkind='r'
) LOOP
EXECUTE format('DROP TABLE %I.%I;',
r.nspname, r.relname);
END LOOP;
-- sequences
FOR r IN (SELECT pns.nspname, pc.relname
FROM pg_class pc, pg_namespace pns
WHERE pns.oid=pc.relnamespace
AND pns.nspname NOT IN ('information_schema', 'pg_catalog', 'pg_toast')
AND pc.relkind='S'
) LOOP
EXECUTE format('DROP SEQUENCE %I.%I;',
r.nspname, r.relname);
END LOOP;
-- extensions (see below), only if necessary
FOR r IN (SELECT pns.nspname, pe.extname
FROM pg_extension pe, pg_namespace pns
WHERE pns.oid=pe.extnamespace
AND pns.nspname NOT IN ('information_schema', 'pg_catalog', 'pg_toast')
) LOOP
EXECUTE format('DROP EXTENSION %I;', r.extname);
END LOOP;
-- functions / procedures
FOR r IN (SELECT pns.nspname, pp.proname, pp.oid
FROM pg_proc pp, pg_namespace pns
WHERE pns.oid=pp.pronamespace
AND pns.nspname NOT IN ('information_schema', 'pg_catalog', 'pg_toast')
) LOOP
EXECUTE format('DROP FUNCTION %I.%I(%s);',
r.nspname, r.proname,
pg_get_function_identity_arguments(r.oid));
END LOOP;
-- nōn-default schemata we own; assume to be run by a not-superuser
FOR r IN (SELECT pns.nspname
FROM pg_namespace pns, pg_roles pr
WHERE pr.oid=pns.nspowner
AND pns.nspname NOT IN ('information_schema', 'pg_catalog', 'pg_toast', 'public')
AND pr.rolname=current_user
) LOOP
EXECUTE format('DROP SCHEMA %I;', r.nspname);
END LOOP;
-- voilà
RAISE NOTICE 'Database cleared!';
END; $$;
PostgreSQL 9.6 ( ) 에서 추후 추가 ( Clément Prévost 제공 )를 제외하고 테스트 extensions
되었습니다 . 버그 수정 및 추가 개선을 환영합니다!jessie-backports
음, 명령 줄에서 작업하는 것을 좋아하기 때문에 ...
psql -U <user> -d <mydb> -c '\dt' | cut -d ' ' -f 4 | sed -e "s/^/drop table if exists /" | sed -e "s/$/;/"
-c '\dt'
list tables 명령을 호출합니다.
List of relations Schema | Name | Type | Owner --------+-------------------+-------+---------- public | _d_psidxddlparm | table | djuser public | _d_psindexdefn | table | djuser
cut -d ' ' -f 4
이제 출력을 파이프하여 네 번째 필드 (분리 자로 공백을 사용할 때) 인 테이블을 가져옵니다.
sed
그런 다음 a 접두사 drop table
및 ;
명령 구분 기호 접미사에 사용됩니다 .
| egrep '_d_'
- grep
더 많은 테이블로 연결하면 드롭하는 테이블에 대해 더 선택적으로 선택할 수 있습니다.
drop table if exists _d_psidxddlparm; drop table if exists _d_psindexdefn;
참고 : 작성된대로 이것은 \dt
열 머리글 의 명령 출력과 끝에있는 총 행에 대해 가짜 행을 생성 합니다. 나는 grepping하여 해당하지 않도록,하지만 당신은 사용할 수 head
및 tail
.
가장 쉬운 방법은 이전 답변에서 다른 사람들이 제안한 것처럼 공개 스키마를 삭제하는 것입니다. 그러나 이것은 좋은 방법이 아닙니다. 그 이후로 잊혀지고 문서화되지 않은 공개 스키마에 대해 수행 된 작업을 알 수 없습니다. 또한 이것이 미래에도 똑같이 작동 할 것인지도 모릅니다. V9에서는 괜찮 았지만 V10에서는 모든 사용자가 스키마에 대한 액세스 권한을 잃어 버리고 다시 액세스 권한을 부여 받아야합니다. 그렇지 않으면 애플리케이션이 중단됩니다. 나는 V11을 확인하지 않았지만 요점은 컴퓨터에서 컴퓨터로, 사이트에서 사이트로 또는 버전에서 버전으로 이동할 때 무엇이 깨질 지 결코 알 수 없다는 것입니다. 데이터베이스에 대한 액세스 권한이 있지만 스키마에는 액세스 할 수없는 사용자 인 경우에도 수행 할 수 없습니다.
프로그래밍 방식으로이 작업을 수행해야하는 경우 위의 다른 답변에서이를 다루지 만 위의 답변에서 고려하지 않는 한 가지는 Postgres가 작업을 수행하도록하는 것입니다. 아래와 같이 -c 옵션과 함께 pg_dump를 사용하는 경우 :
sudo su postgres -c "pg_dump -U postgres WhateverDB -c -f "/home/Anyone/DBBackupWhateverDB-ServerUnscheduled.sql""
그러면 모든 테이블을 삭제하는 SQL 문으로 DB 복원 스크립트가 생성됩니다.
질문의 유일한 목적이 복원 전에 테이블을 삭제하는 것이라면 복원이 자동으로 수행됩니다.
그러나 다른 작업에 필요한 경우 SQL 스크립트에서 drop 문을 복사하면됩니다.
참고 URL : https://stackoverflow.com/questions/3327312/how-can-i-drop-all-the-tables-in-a-postgresql-database
'code' 카테고리의 다른 글
Java에서 메소드 실행 시간을 어떻게 측정합니까? (0) | 2020.09.29 |
---|---|
Android에서 사용자의 현재 위치를 얻는 가장 간단하고 강력한 방법은 무엇입니까? (0) | 2020.09.29 |
PowerShell에서 코드를 어떻게 주석 처리합니까? (0) | 2020.09.28 |
병합을 완료하지 않았습니다 (MERGE_HEAD가 있음). (0) | 2020.09.28 |
git log에 svn log -v와 같은 파일 이름을 표시하는 방법 (0) | 2020.09.28 |