サブクエリーを使用して、drop_partitionの動的述語値を生成することはできません。
通常、私は動的関数の欠落を、.sqlファイルにdrop_partitionのSQL表現を生成するスクリプトで処理し、次のステップで実行します。
ここでは例を参照してください:
create table tblone (id int not null) partition by id;
insert into tblone values (1);
commit;
- ファイルに
\o /tmp/file.sql
select
'SELECT DROP_PARTITION(''public.tblone'','||
max(id)||
');' from tblone;
をクエリの出力をフラッシュ - ファイル
\i /tmp/file.sql
--this is the content.
SELECT DROP_PARTITION('public.tblone',1);
の内容を実行します
これは、非日付に基づくパーティションと、b他のデータセットから導出される。あなたはパーティション・キーまたはあなたが動的にdrop_partitionキー値を移入するために内部関数を使用することができ、データ列から導出値として日付を持っている場合は
:
drop table tblone cascade;
create table tblone (id date not null) partition by
(((date_part('year', id) * 100) + date_part('month', id)));
insert into tblone values (getdate());
commit;
dbadmin=> select * from tblone;
id
------------
2017-01-04
(1 row)
dbadmin=> SELECT DROP_PARTITION('tblone',(date_part('year', getdate()) * 100) + date_part('month', getdate()));
DROP_PARTITION
-------------------
Partition dropped
(1 row)
dbadmin=> select * from tblone;
id
----
(0 rows)
- あなたは常にGETDATEで遊ぶことができます()を使用して、現在または先月または希望する期間を取得します。
別のオプションは、VSQL cmdをライン変数 例
が
dbadmin=> drop table tblone cascade;
DROP TABLE
dbadmin=> create table tblone (id int not null) partition by id;
CREATE TABLE
dbadmin=> insert into tblone values (1);
1
dbadmin=> commit;
COMMIT
dbadmin=> select * from tblone;
id
----
1
(1 row)
を使用することです - 唯一のタプル
dbadmin=> \t
Showing only tuples.
示し - ファイルに最大値を吐くを
dbadmin=> \o /tmp/file
dbadmin=> select max(id) from tblone;
dbadmin=> \o
dbadmin=> \t
Tuples only is off.
- ファイルの内容を変数の値を設定します(あなたの最大値)
dbadmin=> \set maxvalue `cat /tmp/file`
dbadmin=> \echo :maxvalue
1
- 私は願ってい変数
dbadmin=> SELECT DROP_PARTITION('tblone',:maxvalue);
DROP_PARTITION
-------------------
Partition dropped
(1 row)
dbadmin=> select * from tblone;
id
----
(0 rows)
- を使用して、ドロップパーティションを実行しますこれは:)
TAから多くのパーティションをドロップする簡単な方法を助けましたであろう(データベースに対して、これはメインテーブルにはロックを必要としないであろうとダミーテーブルをドロップ安価タスクである - コードの一行がダミーテーブルにMOVE_PARTITIONS_TO_TABLEを用いてダミーテーブル を落とすことになる使用BLEバルクdrop_partitionの)。
- ベーステーブル(投影を含む)からダミーテーブルを作成します。
- ( 'ターゲット/ダミーテーブル' '分割する'、 ' パーティションから' 源 ')動的MOVE_PARTITIONS_TO_TABLEを生成します。
- ドロップダミーテーブル。あなたが見れば -
が小さい例を参照してください が
\o /tmp/file.sql
select 'create dummy table as source table including projections;';
select
'SELECT MOVE_PARTITIONS_TO_TABLE(''source'','''||
:minpartition()||
''','''||
:maxpartition()||
''',''target/dummy table'')'
from tblone;
select 'drop table dummy cascade';
-- execute the content of the file
\i /tmp/file.sql
--make sure the content of the file is correct content
**
BTW(&が実行生成)と同じアプローチである(100はあなたがそれを適応させることができcomplete-ではありません)時間 から時間へのVerticaデータベースの記事やスクリプトのために私はhttp://wwww.aodba.com
に投稿します
**
どうもありがとうございました。これはトリックです。共有した方法に基づいて複数のパーティションを削除する方法があるかどうか疑問に思っていました。それはケーキのアイシングになります。 – minatverma
@minatverma - 私はあなたにアイシングをリクエストしました:) –
Thanks a ton。本当に役に立ちました。 – minatverma