RDS PostgreSQL提供RDKit外掛程式,支援化學分子計算、化學分子檢索等功能。
前提條件
執行個體版本為RDS PostgreSQL 12。背景資訊
RDKit外掛程式支援mol資料類型(描述分子類型)和fp資料類型(描述分子指紋),在此基礎上支援比較運算、相似性計算(Tanimoto、Dice)和GiST索引。
更多RDKit外掛程式SQL操作請參見RDKit SQL。
注意事項
- mol資料類型的輸入、輸出函數遵循簡化分子線性輸入規範(SMILES)。
- fp資料類型的輸入、輸出功能遵循bytea(儲存位元據的欄位類型)格式。
建立外掛程式
postgres=# create extension rdkit ;
CREATE EXTENSION
預設參數配置
postgres=# show rdkit.tanimoto_threshold ;
rdkit.tanimoto_threshold
--------------------------
0.5
(1 row)
postgres=# show rdkit.dice_threshold;
rdkit.dice_threshold
----------------------
0.5
(1 row)
索引支援
- mol和fp的比較運算操作支援Btree索引、Hash索引。例如:
CREATE INDEX molidx ON pgmol (mol); CREATE INDEX molidx ON pgmol (fp);
- mol的
%
、#
、@>
、<@
操作和fp結構的%
、#
操作支援Gist索引。例如:CREATE INDEX molidx ON pgmol USING gist (mol);
函數樣本
- tanimoto_smlFunction Computetanimoto相似性。
postgres=# \df tanimoto_sml List of functions Schema | Name | Result data type | Argument data types | Type --------+--------------+------------------+---------------------+------ public | tanimoto_sml | double precision | bfp, bfp | func public | tanimoto_sml | double precision | sfp, sfp | func (2 rows)
- dice_smlFunction Computedice相似性。
postgres=# \df dice_sml List of functions Schema | Name | Result data type | Argument data types | Type --------+----------+------------------+---------------------+------ public | dice_sml | double precision | bfp, bfp | func public | dice_sml | double precision | sfp, sfp | func (2 rows)
- substruct函數,當函數的第二個參數是第一個參數的子結構時,函數返回結果為TRUE。
postgres=# \df substruct List of functions Schema | Name | Result data type | Argument data types | Type --------+-----------+------------------+---------------------+------ public | substruct | boolean | mol, mol | func public | substruct | boolean | mol, qmol | func public | substruct | boolean | reaction, reaction | func (3 rows)
基礎操作說明
mol % mol
、fp % fp
當Tanimoto相似性計算結果小於GUC配置參數rdkit.tanimoto_threshold時,該操作返回結果為TRUE。
mol # mol
、fp # fp
當Dice相似性計算結果小於GUC配置參數rdkit.dice_threshold時,該操作返回結果為TRUE。
mol @> mol
如果操作符
@>
左邊對象包含右邊對象,該操作返回結果為TRUE。mol <@ mol
如果操作符
<@
右邊對象包含左邊對象,該操作返回結果為TRUE。