私はPostgreSQL 9.6を使用しています。 PostgreSQLに文字列と数値を含む新しい通貨型拡張を作成したいと思います。内部型を使用してPostgreSQLのカスタム構造体データ型を書き込む方法
ドキュメントhttps://www.postgresql.org/docs/9.6/static/sql-createtype.htmlによると、私はPostgreSQLで直接作成することができますが、これは文字列を使用して型を表現してキャストしたいので、私が望むものではありません。だから解決策は、 "ボックス"タイプのようなカスタムタイプを作成することです。ドキュメントには次の情報が表示されます。
CREATE TYPE box;
CREATE FUNCTION my_box_in_function(cstring) RETURNS box AS ... ;
CREATE FUNCTION my_box_out_function(box) RETURNS cstring AS ... ;
CREATE TYPE box (
INTERNALLENGTH = 16,
INPUT = my_box_in_function,
OUTPUT = my_box_out_function
);
しかし、このような関数を書くには、実際には役に立ちません。さらに検索すると、関数はC言語でしか記述できず、単純型の例であり、構造体型ではありません。
だから私は基本的に、私は私のvarlenaヘッダを実装する手間を省くことになる固定式の数値を、使用したい
typedef struct {
char code[4];
Numeric numeric;
} Currency
ような何かをしたいです。通常、通貨には小数点が固定されています。また、数値型の関数を再利用できるので、数値型を内部的に使用できるようにしたいと考えています。
私の構造体を定義するために、PostgreSQLと同様の構文(Numeric(10,2)など)を使用できるように、Numericを使用するにはどうすればよいですか? currency_in関数の中でnumeric_in関数を使用できますか?
私は実際にCompositeタイプを作成したいと思いますが、Baseタイプではありません。 – Kevin
あなたがこのようにしたいことをすることは、大変な作業です。演算子、インデックスへのアクセスのための演算子クラス、さらに多くを定義する必要があります。あなたはかなりのポストグルの内臓をしっかりと理解しておく必要があります。 Cのユーザ定義データ型は、包括的に実装するのは簡単ではありません。ドメインまたは複合型を考えてみましょう。 –
VARLENAヘッダーが最初に来なければならないので、実際には、それをどのように記述すればうまくいきません。 –