Bash 스크립트에서 Postgres 사용자 역할을 삭제하려고합니다. 그러나 Postgres는 나를 그렇게시키지 않습니다, 나는 Cannot drop table X because other objects depend on it
을 얻고 있습니다.Postgres : 특정 역할에 속한 모든 테이블을 삭제합니다 (또는 종속 개체를 무시하고 강제로 역할을 삭제합니다).
그래서 역할을 제거 할 수 있도록 해당 역할에 의존하는 모든 테이블을 삭제하려고합니다. 따라서 나는 특정 역할에 속하는 모든 테이블을 제거해야하는 Postgres 함수 (첫 번째 게시물, 일부 게시물에서 영감을 얻은)를 작성했습니다.
이
는 함수를 포함하는 배쉬 스크립트 및 역할bob
에 해당 기능을 적용하려고 :
#!/bin/bash
sudo su - postgres -c "psql -d postgres -U postgres" << 'EOF'
CREATE LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION truncate_tables(username IN VARCHAR) RETURNS void AS $$
DECLARE
statements CURSOR FOR
SELECT tablename FROM pg_tables
WHERE tableowner = username;
BEGIN
FOR stmt IN statements LOOP
EXECUTE 'TRUNCATE TABLE ' || quote_ident(stmt.tablename) || ';';
END LOOP;
END;
$$
LANGUAGE plpgsql;
EOF
sudo su - postgres -c "psql -d postgres -U postgres -c \"SELECT truncate_tables('bob');\""
내가 오류를하지 않지만, 스크립트는 아무런 효과가 없습니다 - 속해있는 테이블을 역할을 잃지 않습니다. 다음은 결과입니다.
CREATE FUNCTION
truncate_tables
-----------------
(1 row)
내 기능의 오류는 어디에 있습니까? 또는 종속 객체를 무시하고 강제로 역할을 삭제하는 다른 방법이 있습니까?
편집 :
가 나는 또한 제거하기 전에 DROP OWNED BY bob;
를 삽입하려고했으나 아직도의 삭제를 방지하는 역할에 따라 개체가 있습니다.