0
votes

Déposez toutes les tables dans un schéma redshift (sans autorisation d'abandon)

Je serais intéressé de laisser tomber toutes les tables dans un schéma redshift. Même si cette solution fonctionne

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


1 commentaires

Écrivez la boucle dans Python ou une autre langue de script, externe à votre cluster?


5 Réponses :


8
votes

Exécutez ce SQL et copiez + Coller le résultat sur votre client SQL. Si vous voulez le faire de manière programmatique, vous devez construire un petit code bit autour de lui.

SELECT 'DROP TABLE IF EXISTS ' || tablename || ' CASCADE;' FROM pg_tables WHERE schemaname = '<your_schema>'


0 commentaires

1
votes

Utilisation de python et PYSCOPG2 Je suis venu avec ce script pour supprimer toutes les tables dans SCHEMA CODE>:

import logging
import psycopg2

logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger('redshift_debug')

schema = "schema_to_be_deleted"
try:
    conn = psycopg2.connect("dbname='{}' port='{}' host='{}' user='{}' password='{}'".format("DB_NAME", "DB_PORT", "DB_HOST", "DB_USER", "DB_PWD"))
    cursor = conn.cursor()

    cursor.execute("SELECT tablename FROM pg_tables WHERE schemaname = '%s'" % schema)
    rows = cursor.fetchall()
    for row in rows:
        logger.info("Dropping table " + row[0] + "...")
        cursor.execute("DROP TABLE {}.{}".format(schema, row[0]))

    cursor.close()
    conn.commit()

except psycopg2.DatabaseError as error:
    logger.error(error)
finally:
    if conn is not None:
        conn.close()


4 commentaires

Comment importer la bibliothèque?


Si vous parlez de psycopg2 , je pense qu'un pips facile installer psycopg2 doit faire le travail si vous utilisez PIP comme gestionnaire de paquets pypi.org/project/psycopg2


Cette bibliothèque ne devrait-elle pas être importée dans AWS? Être utilisé dans AWS?


@HENROV J'ai exécuté ce script Python dans mon PC local en tant que client et connecté au cluster redshift via des informations d'identification, tout comme n'importe quel autre SGBD.



1
votes

J'ai résolu la procédure qui supprime tous les enregistrements. En utilisant cette technique pour tronquer échouer, mais la suppression de cela fonctionne bien à mes fins et à mes fins.

create or replace  procedure sp_truncate_dwh() as $$

DECLARE 
    tables RECORD;

BEGIN

FOR tables in   SELECT tablename 
                FROM pg_tables 
                WHERE  schemaname = 'dwh'  
                order by tablename
        LOOP
        EXECUTE 'delete from dwh.' || quote_ident(tables.tablename) ;
        END LOOP;
RETURN;

END;
$$ LANGUAGE plpgsql;

--call sp_truncate_dwh()


1 commentaires

Les procédures de Redshift n'ont été disponibles que depuis le 17 mai 2019 aws.amazon.com/about-aws/whats-new/2019/05/... Pour que cela puisse être une solution intéressante en utilisant des procédures, je vais essayer d'essayer



1
votes

En plus de la réponse de DEMIRCIOGLU, je devais ajouter de commettre après chaque instruction DROP pour laisser tomber toutes les tables de mon schéma. Sélectionnez 'Drop Table si existe' || Nom de la table || ' CASCADE; S'ENGAGER;' De pg_tables où Schemaname = '' P.s.: Je n'ai pas obligé la réputation d'ajouter cette note comme un commentaire et devait ajouter une réponse.


0 commentaires

2
votes
SELECT 'DROP TABLE IF EXISTS ' 
       || table_name 
       || ' CASCADE;' 
FROM   information_schema.tables 
WHERE  table_schema = '<your_schema>' 
       AND table_name LIKE '<%condition%>' 

2 commentaires

Salut! Alors que ce code peut résoudre la question, , y compris une explication de la manière et pourquoi cela résout le problème aiderait vraiment à améliorer la qualité de la qualité. de votre message et aboutit probablement à plus de votes. N'oubliez pas que vous répondez à la question des lecteurs à l'avenir, pas seulement la personne qui demande maintenant. S'il vous plaît Modifier Votre réponse Pour ajouter des explications et donner une indication de quelles limitations et hypothèses s'appliquent.


C'est drôle, il suffit de copier une autre réponse avec quelques modifications de formatage.