PostgreSQL දත්ත ගබඩාවක සියලුම වගු අතහැර දැමිය හැක්කේ කෙසේද?


1093

විධාන රේඛාවේ සිට වැඩ කරන PostgreSQL හි සියලුම වගු අතහැර දැමිය හැක්කේ කෙසේද?

දත්ත සමුදාය අතහැර දැමීමට මට අවශ්‍ය නැත , සියලු වගු සහ ඒවායේ ඇති සියලුම දත්ත පමණි.


3
ඔබ කතා කරන්නේ කුමන විධාන රේඛාව ගැනද? ඔබ වින්ඩෝස් පවර්ෂෙල් ක්‍රියාත්මක කිරීමක් සොයන බව අපි දනිමු.
ග්‍රෙග් ස්මිත්

4
සමාවන්න. විධාන රේඛාවේ 'psql' ටයිප් කිරීමෙන් පසුව යුනික්ස් හි වැඩ කිරීම - එබැවින් psql විධාන රේඛා පරිසරයම වේ.
AP257

104
ඩ්‍රොප් ස්කීමා පොදු කැස්කැඩ්; - කම්පනයට
wildplasser

20
F 0fnt ඔබට කළ යුතුව ඇත්තේ 'SCHEMA පොදු නිර්මාණය කරන්න;' නැවත නව වගු එක් කිරීමට (දුෂ්කර මාර්ගය සොයා ගත්තේය)
nym

4
BTW, ඔබ පහත වැටෙන විට public, ඔබට ස්ථාපනය කර ඇති දිගු කිසිවක් අහිමි වේ.
sudo

Answers:


1422

ඔබගේ සියලු වගු තනි යෝජනා ක්‍රමයක තිබේ නම්, මෙම ප්‍රවේශය ක්‍රියාත්මක විය හැකිය (පහත කේතයට අනුව ඔබගේ යෝජනා ක්‍රමයේ නම යැයි උපකල්පනය කරයි 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;

112
මෙය පොදු යෝජනා ක්‍රමයේ අර්ථ දක්වා ඇති සියලුම කාර්යයන්, අදහස් ආදිය මකා දමනු ඇති බව සලකන්න.
බ්‍රැඩ් කොච්

5
මෙම පද්ධතිය වගු (එවැනි ආරම්භ වන එම ලෙස ඉවත් නොවන බව සටහන් කර ගන්න pg_ඔවුන් වෙනස් ක්රමානුරූපය සිටින ලෙස), pg_catalog.
congusbongus

37
මෙය ඔබ psql වෙත පිවිසී ඇති පරිශීලකයාට w / OWNER කට්ටලය නිර්මාණය කරයි. මෙය වෙනත් පරිශීලකයෙකු ලෙස ලොග් වූ w / යෙදුම් සමඟ ගැටෙනු ඇත. එවැනි අවස්ථාවකදී, ඔබ "පශ්චාත් උපාධි සඳහා ALTER SCHEMA පොදු හිමිකරු" ධාවනය කළ යුතුය; (හෝ වගු සෑදීමට ඔබගේ යෙදුම භාවිතා කරන ඕනෑම පරිශීලකයෙකුට)
mgojohn

13
මෙය GRANT ALL ON SCHEMA public TO public;නිර්මාණය කිරීමෙන් පසු ඔබට අවශ්‍ය වෙනත් පිළිතුරකින් ගෙන ඒම .
ෆෙඩරිකෝ

1
Ed ෆෙඩරිකෝ GRANT ALLනිර්මාණය කිරීමෙන් පසු ඔබට අවශ්‍ය ඇයි ?
425nesp

414

මේ වගේ 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

ඉන්පසු එය ක්රියාත්මක කරන්න.

තේජාන්විත COPY + PASTE ද ක්‍රියාත්මක වේ.


16
මම හිතන්නේ ඔබ අදහස් කළේ: ඔබට මේ වගේ විමසුමක් ලිවිය හැකිය ... ... ඉන්පසු විමසුමේ ප්‍රතිදානය ක්‍රියාත්මක කරන්න
වින්කෝ වර්සාලොවික්

5
'තිබේ නම් පතන වගුව තෝරන්න' '|| වගු නාමය ||' "කඳුරැල්ල; ' pg_tables වෙතින්; ලොකු අකුරු සහිත වගු ද නිසි ලෙස අතහැර දමා ඇති බවට වග බලා ගනී.
අයිවෝ වැන් ඩර් විජ්ක්

12
වගන්තිය "කොහේද schemaname = 'මහජන'" LenW ඔහුගේ පිළිතුර ඔබ පද්ධතියේ අය කළමනාකරණය නොව දත්ත පමණක් මකා හි විෂය පථය අඩු කිරීමට ඉතා ප්රයෝජනවත් විය හැකි එකතු බව
ගුලියම්සි Gendre

8
wjwg: එසේම, සමහර විට ඔබට අවසර නොමැති නිසා drop schema public cascade;, නමුත් ඔබට සෑම විටම පාහේ වගු අතහැර දැමීමට අවසර ඇත.
බර්ක්ස්

2
පොදු යෝජනා ක්‍රම සඳහා නොවන අනුවාදය: 'තිබේ නම් පහත වගුව තෝරන්න' '|| schemaname ||' "." '|| වගු නාමය ||' "කඳුරැල්ල; ' pg_tables වෙතින් schemaname = 'user_data';
ලුඩ්විග්

298

මෙම ලිවීමේදී වඩාත්ම පිළිගත් පිළිතුර (2014 ජනවාරි):

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

මා හට කලින් ඇති වූ ගැටළු භාවිතා කරමින් දත්ත සමුදා වගු (වෙබ් 2 පීපී) නිර්මාණය කරන පයිතන් වෙබ් රාමුවක් භාවිතා කිරීම:

<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 හි මෙම විධානයන් නිකුත් කිරීමටද සටහන් කරන්න, මම විමසුම් මෙවලම භාවිතා කළෙමි (විශාලන වීදුරු නිරූපකය "සංක්ෂිප්ත SQL විමසුම් ක්‍රියාත්මක කරන්න") හෝ ඔබට ප්ලගීන-> PSQL කොන්සෝලය භාවිතා කළ හැකිය.

සටහන

ඔබ සතුව කිසියම් දිගුවක් ස්ථාපනය කර ඇත්නම්, ඔබ යෝජනා ක්‍රමය අතහැර දැමූ විට ඒවා අතහැර දමනු ඇත, එබැවින් ඔබ ස්ථාපනය කළ යුතු දේ සටහන් කර අවශ්‍ය ප්‍රකාශ ක්‍රියාත්මක කළ යුතුය. උදා

CREATE EXTENSION postgis;


7
තහවුරු කර ඇත. PostgreSQL 9.1 හි වැඩ කිරීමට භාවිතා කළ පේළි දෙකේ විසඳුම ( dropඑවකට create). 9.3 දක්වා උත්ශ්‍රේණිගත කිරීමෙන් පසුව, අමතර දෙක grantඅවශ්‍ය වේ.
ජිංහාඕ ෂි

4
තවත් එක් තහවුරු කිරීමක්: ජැන්ගෝ භාවිතා කරමින්, මට එකම දෝෂයක් ඇතිවිය; ජැන්ගෝ දත්ත සමුදාය සමඟ අන්තර් ක්‍රියා කිරීමට පෙර මට එම ප්‍රදාන ක්‍රියාත්මක කිරීමට අවශ්‍ය විය.
rjh

2
සමහර දිගුවන් නැවත ස්ථාපනය කිරීමට මට අවශ්‍ය වූවා හැර, මෙය මනාව ක්‍රියාත්මක විය: ගබඩාව නොපවතින නම් ව්‍යාප්තිය සාදන්න; Pgcrypto නොපවතින නම් ව්‍යාප්තිය සාදන්න;
ෂකර්

178

ඔබට සියලු වගු අතහැර දැමිය හැකිය

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 නැවත පරිවර්තකයට පිටපත් කිරීම අවශ්‍ය නොවේ.


4
මෙය පළ කිරීම ගැන ස්තූතියි! drop schemaපරිශීලකයා යෝජනා ක්‍රමයේ හිමිකරු නොවන නිසා මට උපක්‍රමය භාවිතා කළ නොහැකි විය, වගු පමණි. මෙය ක්‍රියාත්මක වුවද :)
vdboor

ඉතා පිරිසිදු හා විශේෂිත ... විශිෂ්ට විසඳුමක් වන අතර එයද පිළිගත යුතුය
PostGIS

EXECUTE 'DROP TABLE IF EXISTS ' || quote_ident(r.tablename) || ' CASCADE'; මේ සමඟ එම රේඛාව වෙනස් කිරීමට මම යෝජනා කරමි : EXECUTE format('DROP TABLE IF EXISTS %I CASCADE', quote_ident(r.tablename));
ටයිගර්

@tyger ඇයි? එය මට අනවශ්‍ය සංකූලතාවයක් සේ පෙනේ. එන්නත් කිරීමේ හැකියාවක් තිබේද (මෙය තිබේ නම් මෙය සැබවින්ම නිවැරදි කරයිද)? [පෝස්ට්ග්‍රෙස් මෝඩද යන්න වගු නාමවලට ​​ඉඩ දීමට තරම් මෝඩදැයි මම නොදනිමි] තිබේ නම්, ඔබ ඇත්ත වශයෙන්ම ඔබේ අදහස පිළිතුරේ සංස්කරණයකට වෙනස් කළ යුතුය (සංස්කරණ අදහස් දැක්වීමේදී එය පැහැදිලි කරයි).
අවුස්පෙක්ස්

Us අවුස්පෙක්ස් හෙහ්, මම එය කරන විට කලින් ප්‍රභේදය සමඟ යම් ගැටළුවක් විය. දැන් මතක නැත ...
ටයිගර්

132

ඔබට අතහැර දැමීමට අවශ්‍ය සියල්ල එකම පරිශීලකයා සතු නම්, ඔබට මෙය භාවිතා කළ හැකිය:

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


2
මෙය පරිශීලකයා සතු සියලු යෝජනා ක්‍රම අතහැර දැමීය (මට එය කිරීමට අවශ්‍ය නොවීය).
පීටර් එල්

4
EtPeterL: එය අත්පොතෙහි පැහැදිලිව ලේඛනගත කර ඇත, නමුත් “සියල්ල” යන්නෙන් සැබවින්ම සියල්ල
a_horse_with_no_name

මම current_user සතු ඩ්‍රොප් භාවිතා කරමි; මේ ආකාරයෙන් ඔබ නිවැරදි පරිශීලක නාමය ටයිප් කිරීම ගැන කරදර විය යුතු නැත.
JavaGeek

2
ඇත්තටම මට හොඳ විසඳුමක්. මගේ දත්ත සමුදාය සහ publicයෝජනා ක්‍රමය අයත් වන්නේ postgres, නමුත් අනෙක් සියල්ල නිශ්චිත පරිශීලකයෙකු සතු වන අතර, එම පරිශීලකයා සතු සියල්ල අතහැර දැමීම මඟින් ක්‍රමාංකය හැර දත්ත සමුදාය හිස් වේ.
අවුස්පෙක්ස්

ප්‍රලේඛනය එය වරප්‍රසාද අවලංගු කරන බව පවසන නමුත් ඔබ මෙය සාමාන්‍ය පරිශීලකයෙකු ලෙස ක්‍රියාත්මක කරන්නේ නම් එය කළ නොහැකි බැවින් එය වගු සහ ඒ හා සමාන දෑ අතහැර දමයි, එය මට අවශ්‍ය දේම වේ. හොඳයි!
චෙට්ප්‍රිකල්ස්

77

ඉහත පැබ්ලෝට අනුව, නඩුව සම්බන්ධයෙන් නිශ්චිත යෝජනා ක්‍රමයකින් ඉවත් වීමට:

select 'drop table "' || tablename || '" cascade;' 
from pg_tables where schemaname = 'public';

මම මෙය භාවිතා කළෙමි, එය මට වැඩ කළේය. where schemaname='public'කොටස වැදගත් යැයි මම සිතමි ?
ibic

1
@ibic ඔබ පිටව ගියහොත් ඔබට අවශ්‍ය සියලුම අභ්‍යන්තර පෝස්ට්ග්‍රෙස් වගු මකා දැමීමට උත්සාහ කළ හැකිය, එය බොහෝ විට ඔබට අවශ්‍ය දේ නොවේ.
සුළි සුළඟ

49
drop schema public cascade;

උපක්‍රමය කළ යුතුයි.


10
මෙය පොදු යෝජනා ක්‍රමයේ අර්ථ දක්වා ඇති සියලුම කාර්යයන්, අදහස් ආදිය මකා දමනු ඇති බව සලකන්න.
ජෝ වැන් ඩයික්

6
මේස නැවත එකතු කිරීම සඳහා ඔබට පසුව නැවත ප්‍රතිනිර්මාණය කිරීමට සිදුවේ CREATE SCHEMA public;. වැඩි විස්තර සඳහා stackoverflow.com/a/14286370 ද බලන්න
mikermcneil

29

පැබ්ලෝ සහ ලෙන්ඩබ්ලිව් අනුගමනය කරමින්, මෙන්න එක් ලයිනර් එකක් වන අතර ඒ සියල්ල සූදානම් කිරීම සහ ක්‍රියාත්මක කිරීම සිදු කරයි:

psql -U $PGUSER $PGDB -t -c "select 'drop table \"' || tablename || '\" cascade;' from pg_tables where schemaname = 'public'" | psql -U $PGUSER $PGDB

සැ.යු: කට්ටලයක් හෝ වෙනුවට එක්කෝ $PGUSERහා $PGDBඔබට අවශ්ය අගයන්


22

ඔබ සතුව PL / PGSQL කාර්ය පටිපාටික භාෂාව ස්ථාපනය කර ඇත්නම් ඔබට ෂෙල් / පර්ල් බාහිර ස්ක්‍රිප්ට් නොමැතිව සියල්ල ඉවත් කිරීමට පහත සඳහන් දෑ භාවිතා කළ හැකිය.

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 තැපැල් ලැයිස්තුවක් ඇති අයෙකුගෙන් යැයි සිතන්න. කවදා හෝ කුමන එකක්දැයි හරියටම මතක නැත.


20

ඔබට කෙසේ හෝ සියලු වගු නිරුවත් කිරීමට අවශ්‍ය නම්, සියලු වගු තනි ප්‍රකාශයකට ඇතුළත් කිරීමෙන් ඔබට කැස්කැඩ් වැනි ලස්සන දේවල් සමඟ බෙදා හැරිය හැකිය. මෙය ක්‍රියාත්මක කිරීම ඉක්මන් කරයි.

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අදාළ ලෙස.


1
publicක්‍රමාංකය මත ක්‍රියාත්මක නොවන විට , ප්‍රකාශනයේ ක්‍රමානුරූප නාමය ඇතුළත් කිරීමට අමතක නොකරන්න: string_agg(quote_ident(schemaname) || '.' || quote_ident(tablename), ', ')හුදෙක් වගු නම් පසු කිරීම වෙනුවට.
B12Toaster

18

පහත දැක්වෙන පියවර ප්‍රයෝජනවත් විය හැකිය (ලිනක්ස් භාවිතා කරන්නන් සඳහා):

  1. මුලදී postgresපහත දැක්වෙන විධානය මඟින් විධාන විමසුම ඇතුළත් කරන්න :

    sudo -u postgres psql
  2. මෙම විධානය මඟින් දත්ත සමුදාය ඇතුළත් කරන්න (මගේ දත්ත සමුදායේ නම :) maoss:

    \c maoss
  3. දැන් සියලු වගු අතහැර දැමීම සඳහා විධානය ඇතුළත් කරන්න:

    DROP SCHEMA public CASCADE;
    CREATE SCHEMA public;
    
    GRANT ALL ON SCHEMA public TO postgres;
    GRANT ALL ON SCHEMA public TO public;

1
මගේ උබුන්ටු 19.04 හි පියවර අනුගමනය කරමින්, එය දෝෂ රහිතව ක්‍රියාත්මක විය!
ඇලෙක්සැන්ඩ්‍රු-මිහයි මනෝලෙස්කු

15

ජනනය කරන ලද SQL විධාන එක තනි නූලක් ලෙස නැවත ලබා ගැනීමේ පහසුව සඳහා මම පැබ්ලෝගේ පිළිතුර තරමක් වෙනස් කළෙමි:

select string_agg('drop table "' || tablename || '" cascade', '; ') 
from pg_tables where schemaname = 'public'

14

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

ඒ වර්ග අඩි මට අසමත් විය. මම භාවිතා කළේ SELECT concat ('drop table', tablename, 'cascade;') AS drop_table_sql FROM pg_tables WHERE schemaname = 'public'
කීත් ජෝන් හචිසන්

1
මම වැරැද්දක් කළ දෙයක් වෙන්න ඇති, ලූකා. මම නැවත එය උත්සාහ කර එය ක්‍රියාත්මක විය.
කීත් ජෝන් හචිසන්

13

මෙය සැබවින්ම සිත්ගන්නාසුලු ප්‍රශ්නයක් වන අතර, ඔබ එය විවිධාකාරයෙන් සිදු කරනු ඇත. මෙය ඔබට ප්‍රයෝජනවත් වනු ඇතැයි මම බලාපොරොත්තු වෙමි.

  1. වර්තමාන යෝජනා ක්‍රමය අතහැර දමා ප්‍රතිනිර්මාණය කිරීමෙන්

මෙන්න, පොදුවේ, අපට publicපෙරනිමියෙන් යෝජනා ක්‍රමයක් තිබේ . ඉතින්, මම එය උදාහරණයක් ලෙස භාවිතා කරමි.

DROP SCHEMA `public` CASCADE;
CREATE SCHEMA `public`;
GRANT ALL ON SCHEMA public TO postgres;
GRANT ALL ON SCHEMA public TO public;

ඔබ PostgreSQL 9.3 හෝ ඊට වැඩි භාවිතා කරන්නේ නම්, ඔබට පෙරනිමි ප්‍රදාන නැවත ලබා දීමට අවශ්‍ය වනු ඇත.

වාසි:

මෙය සමස්ත යෝජනා ක්‍රමයක්ම පිරිසිදු කර එය නව එකක් ලෙස නැවත නිර්මාණය කරනු ඇත.

අවාසි:

ඔබ ද වැනි අනෙකුත් ආයතන අහිමි වෙතැයි Functions, Views, Materialized views, ආදිය

  1. වගුවේ සිට සියලුම වගු නම් ලබා ගැනීමෙන් pg_tables.

PostgreSQL නම් කර ඇති සියළුම වගු එහි වාර්තා වගුවේ ගබඩා කරයි pg_table.

SELECT
  'DROP TABLE IF EXISTS "' || tablename || '" CASCADE;' 
from
  pg_tables WHERE schemaname = 'public';

ඔබට පෙනෙන පරිදි, උපවගන්තිය භාවිතා කිරීමෙන්, අපට සම්පූර්ණ වගු ක්‍රමයෙන් ඉවත් කළ හැකිය.

වාසි:

අනෙක් දත්ත ආයතන වැදගත් වන අතර, ඔබට යෝජනා ක්‍රමයෙන් වගු පමණක් මකා දැමීමට අවශ්‍ය වූ විට, මෙම ප්‍රවේශය ඔබට සැබවින්ම උපකාරී වනු ඇත.


11

Postgresql දත්ත සමුදාය පිරිසිදු කරන සරල පයිතන් පිටපත

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]

එය පිටපත් කිරීමෙන් පසු පයිතන් එය මත රඳා පවතින බැවින් ඉන්ඩෙන්ටරය නිවැරදි බවට වග බලා ගන්න.


1
වැඩ රේඛාව චමත්කාරජනකයි. මම මෙය තෝරාගත්තේ ඩීබී සම්බන්ධතා තොරතුරු දෘ c කේතනය කිරීමට මා කැමති නිසා - මට කිරීමට අවශ්‍ය අන්තිම දෙය වැරදි ඩීබියට පහර දීමයි! මගේ වගු ලැයිස්තුව චලනය වන ඉලක්කයකි.
ජේ.එල්. පයිරෙට්

9

කොමා වලින් වෙන් කරන ලද ලැයිස්තුවක් සෑදීමට ඔබට string_agg ශ්‍රිතය භාවිතා කළ හැකිය, එය DROP TABLE සඳහා පරිපූර්ණයි. බෑෂ් පිටපතකින්:

#!/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"

විය යුතුය #! / bin / sh
යහපත් පුද්ගලයා

9

ඔබට දත්ත මකා දැමීමට අවශ්‍ය නම් (වගුව මකා නොදමන්න):

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

ඔබට බින්දුවක් අවශ්‍ය නම් ඔබට මෙම වර්ග අඩි භාවිතා කළ හැකිය:

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

8

සටහන: මගේ පිළිතුර ඇත්ත වශයෙන්ම වගු සහ අනෙකුත් දත්ත සමුදා වස්තු මකා දැමීමයි; වගු වල ඇති සියලුම දත්ත මකා දැමීම සඳහා , එනම් සියලු වගු කප්පාදු කිරීම සඳහා , එන්ඩ්‍රේ දෙකම මාසයකට පසුව ඒ හා සමානව හොඳින් ක්‍රියාත්මක කරන ලද (සෘජු ක්‍රියාත්මක කිරීමේ) ප්‍රකාශයක් ලබා දී ඇත.

ඔබ එය කළ හැකි නොවේ එහිදී නඩු සඳහා DROP SCHEMA public CASCADE;, DROP OWNED BY current_user;හෝ දෙයක්, මෙහි Stand-alone SQL විධානාවලි මම ගනුදෙනුව-ආරක්ෂිත වන, ලියා තියෙන්නේ (එනම් ඔබ අතර එය කළ හැකි BEGIN;හා එක්කෝ ROLLBACK;එය ඉවත් පරීක්ෂා කිරීමට හෝ COMMIT;ඇත්තටම ඔප්පු කරන්න) සහ “සියල්ල” දත්ත සමුදා වස්තු පිරිසිදු කරයි… හොඳයි, අපගේ යෙදුම භාවිතා කරන දත්ත සමුදායේ භාවිතා කරන සියල්ලම හෝ මට බුද්ධිමත්ව එකතු කළ හැකිය, එනම්:

  • වගු මත ප්‍රේරක
  • වගු වල සීමාවන් (FK, PK CHECK,, UNIQUE)
  • දර්ශක
  • VIEWs (සාමාන්‍ය හෝ ද්‍රව්‍යමය)
  • මේස
  • අනුපිළිවෙල
  • චර්යාවන් (සමස්ත කාර්යයන්, කාර්යයන්, ක්‍රියා පටිපාටි)
  • සියලු පෙරනිමි (එනම් publicඩීබී-අභ්‍යන්තර) යෝජනා ක්‍රම “අපට” අයත් වේ: “දත්ත සමුදා සුපර් යූසර් නොවේ” ලෙස ක්‍රියාත්මක වන විට ස්ක්‍රිප්ට් ප්‍රයෝජනවත් වේ; සුපිරි පරිශීලකයෙකුට සියළුම ක්‍රමෝපායන් අතහැර දැමිය හැකිය (ඇත්ත වශයෙන්ම වැදගත් ඒවා තවමත් පැහැදිලිවම බැහැර කර ඇත)
  • දිගු (පරිශීලක දායකත්වය නමුත් මම සාමාන්‍යයෙන් ඒවා හිතාමතාම තබමි)

අතහැර දමා නැත (සමහරක් හිතාමතා; සමහර ඒවා අපගේ ඩීබී හි ආදර්ශයක් නොතිබූ නිසා පමණි):

  • මෙම publicක්රමානුරූපය (ඔවුන් දීර්ඝ-සපයන දේවල් සඳහා උදා:)
  • සංයෝජන සහ වෙනත් ස්ථානීය දේවල්
  • සිදුවීම් ප්‍රේරක
  • පෙළ සෙවුම් දේවල්,… ( මට මග හැරී ඇති වෙනත් දේවල් සඳහා මෙහි බලන්න )
  • භූමිකාවන් හෝ වෙනත් ආරක්ෂක සැකසුම්
  • සංයුක්ත වර්ග
  • ටෝස්ට් මේස
  • FDW සහ විදේශීය වගු

ඔබට යථා තත්වයට පත් කිරීමට අවශ්‍ය ඩම්ප් එක නැවත යථා තත්ත්වයට පත් කිරීමට අවශ්‍ය දත්ත ගබඩාවට වඩා වෙනස් දත්ත සමුදා ක්‍රමලේඛ අනුවාදයක් (උදා: ඩේබියන් , ෆ්ලයිවේ හෝ ද්‍රවශීලතා / ඩීබී-මැනුල් සමඟ) මෙය සැබවින්ම ප්‍රයෝජනවත් වේ dbconfig-common.

යමෙකු උනන්දුවක් දක්වන්නේ නම් “වගු දෙකක් හැර අනෙක් සියල්ල සහ ඒවාට අයත් දේ” (අනුක්‍රමයක්, අතින් පරීක්ෂා කර, සමාවෙන්න, මම දනිමි, කම්මැලි) මකා දැමූ අනුවාදයක් ද මා සතුව ඇත; වෙනස කුඩා වේ. මා අමතන්න හෝ උනන්දුවක් දක්වන්නේ නම් මෙම ගබඩාව පරීක්ෂා කරන්න .

SQL

-- Copyright © 2019, 2020
--      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
        q TEXT;
        r RECORD;
BEGIN
        -- triggers
        FOR r IN (SELECT pns.nspname, pc.relname, pt.tgname
                FROM pg_catalog.pg_trigger pt, pg_catalog.pg_class pc, pg_catalog.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_catalog.pg_constraint pcon, pg_catalog.pg_class pc, pg_catalog.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_catalog.pg_constraint pcon, pg_catalog.pg_class pc, pg_catalog.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_catalog.pg_class pc, pg_catalog.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_catalog.pg_class pc, pg_catalog.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_catalog.pg_class pc, pg_catalog.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_catalog.pg_class pc, pg_catalog.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 (only if necessary; keep them normally)
        FOR r IN (SELECT pns.nspname, pe.extname
                FROM pg_catalog.pg_extension pe, pg_catalog.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;
        -- aggregate functions first (because they depend on other functions)
        FOR r IN (SELECT pns.nspname, pp.proname, pp.oid
                FROM pg_catalog.pg_proc pp, pg_catalog.pg_namespace pns, pg_catalog.pg_aggregate pagg
                WHERE pns.oid=pp.pronamespace
                    AND pns.nspname NOT IN ('information_schema', 'pg_catalog', 'pg_toast')
                    AND pagg.aggfnoid=pp.oid
            ) LOOP
                EXECUTE format('DROP AGGREGATE %I.%I(%s);',
                    r.nspname, r.proname,
                    pg_get_function_identity_arguments(r.oid));
        END LOOP;
        -- routines (functions, aggregate functions, procedures, window functions)
        IF EXISTS (SELECT * FROM pg_catalog.pg_attribute
                WHERE attrelid='pg_catalog.pg_proc'::regclass
                    AND attname='prokind' -- PostgreSQL 11+
            ) THEN
                q := 'CASE pp.prokind
                        WHEN ''p'' THEN ''PROCEDURE''
                        WHEN ''a'' THEN ''AGGREGATE''
                        ELSE ''FUNCTION''
                    END';
        ELSIF EXISTS (SELECT * FROM pg_catalog.pg_attribute
                WHERE attrelid='pg_catalog.pg_proc'::regclass
                    AND attname='proisagg' -- PostgreSQL ≤10
            ) THEN
                q := 'CASE pp.proisagg
                        WHEN true THEN ''AGGREGATE''
                        ELSE ''FUNCTION''
                    END';
        ELSE
                q := '''FUNCTION''';
        END IF;
        FOR r IN EXECUTE 'SELECT pns.nspname, pp.proname, pp.oid, ' || q || ' AS pt
                FROM pg_catalog.pg_proc pp, pg_catalog.pg_namespace pns
                WHERE pns.oid=pp.pronamespace
                    AND pns.nspname NOT IN (''information_schema'', ''pg_catalog'', ''pg_toast'')
            ' LOOP
                EXECUTE format('DROP %s %I.%I(%s);', r.pt,
                    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_catalog.pg_namespace pns, pg_catalog.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 ( ) හි පසුකාලීන එකතු කිරීම් හැර ( ක්ලෙමන්ට් ප්‍රෙවොස්ට්extensions විසින් දායක කරන ලදි ) පරීක්ෂා කර ඇත. 9.6 සහ 12.2 යන දිනවල සමස්ථ ඉවත් කිරීම පරීක්ෂා කරන ලද අතර, ක්‍රියා පටිපාටිය ඉවත් කිරීම 12.2 ද පරීක්ෂා කර ඇත. දෝෂ නිවැරදි කිරීම් සහ වැඩි දියුණු කිරීම් සාදරයෙන් පිළිගනිමු!jessie-backports


ඉහත පිටපතේ දෝෂ සහ ක්‍රියාකාරිත්වයන් අතර වෙනස නොපෙන්වන බැවින් දෝෂ ඇත: ක්‍රියා පටිපාටියක් DROP FUNCTIONඅසමත් වන අතර අනෙක් අතට. මම ශ්‍රිත අංශය මේ සඳහා වෙනස් කළෙමි: AND pp.prokind ='f' -- Functionනැතහොත්AND pp.prokind ='p' -- Procedure
බොගීමන්

1
Og බොගීමන් එය දෝෂයක් නොවේ, සමස්ථ කාර්යයන් මඟ හැරීම ලේඛනගත කර ඇති අතර පිටපත 9.6 ට පමණක් පරීක්ෂා කිරීමට ලේඛනගත කර ඇත. නමුත් මම ඔබේ අදහස හදවතට ගෙන එය proisagg≤ 10.x හි සමස්ථ ( prokind) සහ ≥ 11 හි සමස්ථ හා ක්‍රියා පටිපාටි ( ) හැසිරවීමට අනුවර්තනය කළෙමි (ගතිකව පරීක්ෂා කර) දෙකම පරීක්ෂා කළෙමි the ඉඟියට ස්තූතියි.
මිරබිලෝස්

6

ඔබට වගු සහ අනුපිළිවෙල අතහැර දැමිය යුතුය, මෙන්න මට වැඩ කළ දේ

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


5

වත්මන් දත්ත සමුදායේ ඇති සියලුම වගු විනාශ කිරීම සඳහා රේල්ස් සඳහා වේගවත් කාර්යය

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

1
එම ලැයිස්තුවේ නොමැතිවාට වඩා AND table_schema = 'පොදු' යැයි පැවසීම සරල / ආරක්ෂිත විය හැකිය.
ස්ටීව්

කිසියම් හේතුවක් නිසා මගේ යෝජනා ක්‍රමය නිර්මාණය කර ඇත්තේ ජනාකීර්ණ දත්ත සමඟිනි. මෙම රාක්කය ක්රියා කරයි. ඉතින් කළ පසු rake db:create, මම එය ධාවනය කරමි. ඔබ ස්ටීව් තොරතුරක් කරන්න සහ කේතය ඉවත් කළ හැක table_name = වෙනස් ", "කිරීම සඳහා ","සහ #{ tables }දැමිමේ#{tables}
වොෂින්ටන් Botelho

4

මම ජේමි වෙතින් බැෂ් ක්‍රමවේදය වැඩි දියුණු කළේ අදහස් ගැන සැලකිලිමත් වීමෙනි.

පහත දැක්වෙන 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"

නියම පිටපත ... එය භාවිතා කර චාම් එකක් මෙන් ක්‍රියා කළේය. මම අනුක්‍රමයන් සඳහා පේළියක් ද එක් කළෙමි: SEQUENCES =psql -d $PGDB -t --command "SELECT string_agg(sequence_name, ',') FROM information_schema.sequences WHERE sequence_schema='public' AND sequence_catalog='$PGDB'"
raminr

4

වින්ඩෝස් කණ්ඩායම් ගොනුවක:

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

2

හොඳයි, මම විධාන රේඛාවෙන් වැඩ කිරීමට කැමති නිසා ...

psql -U <user> -d <mydb> -c '\dt' | cut -d ' ' -f 4 | sed -e "s/^/drop table if exists /" | sed -e "s/$/;/"

-c '\dt' ලැයිස්තු වගු විධානය ක්‍රියාත්මක කරයි.

List of relations Schema | Name | Type | Owner --------+-------------------+-------+---------- public | _d_psidxddlparm | table | djuser public | _d_psindexdefn | table | djuser

cut -d ' ' -f 4 දැන්, වගුව වන 4 වන ක්ෂේත්‍රය (අවකාශය බෙදුම්කරු ලෙස භාවිතා කරන විට) අල්ලා ගැනීමට එහි ප්‍රතිදානය නල කරන්න.

seda උපසර්ගය drop tableසහ උපසර්ගය සඳහා භාවිතා කරයි; විධාන බෙදුම්කරු භාවිතා කරයි.

| egrep '_d_'- එය grepතවත් කිහිපයකට පයිප්ප කරන්න, ඔබ කුමන වගු අතහැර දමන්නේද යන්න පිළිබඳව ඔබට වඩාත් තෝරා බේරා ගත හැකිය.

drop table if exists _d_psidxddlparm; drop table if exists _d_psindexdefn;

සටහන: ලියා ඇති පරිදි, මෙය \dtතීරු ශීර්ෂයන්හි විධාන ප්‍රතිදානය සඳහා ව්‍යාජ පේළි සහ අවසානයේ සම්පූර්ණ පේළි ජනනය කරනු ඇත . මම grepping විසින් එය වැලැක්වීමට, එහෙත් ඔබ භාවිතා කළ හැකි headහා tail.


2

පහසුම ක්‍රමය නම්, පෙර පිළිතුරු වල අනෙක් අය යෝජනා කර ඇති පරිදි පොදු යෝජනා ක්‍රමය අතහැර දැමීමයි. කෙසේ වෙතත්, මෙය හොඳ ක්‍රමයක් නොවේ. එතැන් සිට අමතක වී ඇති ලේඛනගත නොවූ පොදු ක්‍රමයට කුමක් කර ඇත්දැයි ඔබ දන්නේ නැත. මෙය අනාගතයේදීත් එසේම වේවිදැයි ඔබ දන්නේ නැත. V9 හි එය හොඳ වනු ඇත, නමුත් V10 හි ඔබගේ සියලු පරිශීලකයින්ට යෝජනා ක්‍රමයට ප්‍රවේශය අහිමි වනු ඇති අතර නැවත ප්‍රවේශය ලබා දිය යුතුය. එසේ නොවුවහොත් ඔබේ යෙදුම බිඳී යනු ඇත. මම V11 පරික්ෂා කර නැත, නමුත් කාරණය වන්නේ ඔබ යන්ත්‍රයෙන් යන්ත්‍රයට, වෙබ් අඩවියට වෙබ් අඩවියට හෝ අනුවාදයට අනුවාදයට යන විට බිඳ වැටෙන්නේ කුමක් දැයි ඔබ නොදැන සිටීමයි. ඔබ දත්ත සමුදායට ප්‍රවේශය ඇති පරිශීලකයෙක් නම් එය කළ නොහැක.

ඔබට මෙය ක්‍රමලේඛිකව කිරීමට අවශ්‍ය නම් ඉහත සඳහන් වෙනත් පිළිතුරු මෙය ආවරණය කරයි, නමුත් ඉහත පිළිතුරු නොසලකන එක් දෙයක් නම් ඔබ වෙනුවෙන් වැඩ කිරීමට පෝස්ට්ග්‍රෙස් ලබා ගැනීමයි. පහත දැක්වෙන පරිදි -c විකල්පය සමඟ ඔබ pg_dump භාවිතා කරන්නේ නම්:

sudo su postgres -c "pg_dump -U postgres WhateverDB -c -f "/home/Anyone/DBBackupWhateverDB-ServerUnscheduled.sql""

එමඟින් සියලු වගු මකා දැමිය හැකි SQL ප්‍රකාශ සමඟ DB ප්‍රතිස්ථාපන ස්ක්‍රිප්ටයක් නිර්මාණය වේ.

ප්‍රශ්නය ඇසීමේ එකම අරමුණ ප්‍රතිෂ් restore ාපනය කිරීමට පෙර වගු මකා දැමීම නම්, ඔබේ ප්‍රතිෂ් restore ාපනය ඔබ වෙනුවෙන් වැඩ කරනු ඇත.

කෙසේ වෙතත්, ඔබට එය වෙනත් දෙයක් සඳහා අවශ්‍ය නම්, ඔබට SQL පිටපතෙන් බිංදු ප්‍රකාශ පිටපත් කළ හැකිය.

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.