No Oracle temos um pequeno arquivo sql (truncate_table.sql) que chama uma função que trunca uma tabela:
BEGIN
DBMS_OUTPUT.PUT_LINE('FuncTruncTable executing...');
IF ( FuncTruncTable(upper('&1'))=FALSE) THEN
DBMS_OUTPUT.PUT_LINE('FuncTruncTable failed');
END IF;
END;
/
Pois &1
, passamos schema_name.table_name
. Percebo que os nomes das tabelas no PostgreSQL estão em letras minúsculas. Então, no PostgreSQL eu tentei
IF ( select FuncTruncTable(lower('&1'))=FALSE) THEN....;
Este arquivo SQL é chamado por um shell script ( truncate_single_table.sh
) que basicamente se parece com isto
TableName=$1
LOG_FILE=/some_dir/log/truncate_log.txt
sqlplus user_name/user_pass @/some_dir/sql/truncate_table.sql $TableName > $LOG_FILE
truncate_single_table.sh
é chamado por outro script de shell truncate_tables.sh
.
truncate_tables.sh
monta um monte de tabelas e chama `truncate_single_table.sh para truncá-las uma por uma da seguinte forma:
. /some_dir/bin/truncate_single_table.sh schema_name.TABLE_1 NEW
. /some_dir/bin/truncate_single_table.sh schema_name.TABLE_2 APPEND
. /some_dir/bin/truncate_single_table.sh schema_name.TABLE_3 APPEND
e assim por diante.
NEW
e APPEND
são usados para contar as tabelas - o número de tabelas que devem ser truncadas deve corresponder ao número de tabelas realmente truncadas. Se ocorrer um erro, o trabalho envia um aviso porque (TotalNumber - number of errors) <> TotalNumber
.
Estou tentando converter o processo para PostgreSQL. Sou totalmente novo no PostgreSQL. Simplesmente substituindo
sqlplus user_name/user_pass @/some_dir/sql/truncate_table.sql $TableName > $LOG_FILE
com
psql -d "dbname=$dbname user='user_name' password='user_pass' host=$HostName" -f /some_dir/sql/truncate_gnxsawork_table.sql $TableName > $LOG_FILE
não funciona.
Talvez devam ser usadas opções diferentes (além de -d
, -f
) que eu não conheço.