0
私は、ユーザー定義型MYTYPEを持っています。ここで私が書いたものです:アクセスアレイ
#include "postgres.h"
#include "fmgr.h"
#include "executor/executor.h"
#include "datatype/timestamp.h"
#ifdef PG_MODULE_MAGIC
PG_MODULE_MAGIC;
#endif
PG_FUNCTION_INFO_V1(testfunc);
Datum
testfunc(PG_FUNCTION_ARGS) {
bool isnull;
HeapTupleHeader at = PG_GETARG_HEAPTUPLEHEADER(0);
Datum dt = GetAttributeByName(at, "timestamps", &isnull);
Timestamp ** tts = (Timestamp **) DatumGetPointer(dt);
PG_RETURN_DATUM(**tts);
}
SQLリファレンス:
CREATE OR REPLACE FUNCTION testfunc(mytype) RETURNS timestamp AS 'path/to/library.so', 'testfunc' LANGUAGE C STRICT;
私がテストしようとしているとき、今、私はごみ結果を取得しています:PostgreSQLのソースコードを
postgres=# SELECT testfunc('("{""2017-01-11 00:00:00"", NULL}", 10)');
testfunc
---------------------------
2000-01-01 00:00:00.00001
(1 row)
これはおそらく最初の引数が_timestamp [] _ typeであると予想しているので実際には機能しませんが、実際には複合型の引数_mytype_です。また、[このページ](https://www.postgresql.org/docs/current/static/xfunc-c.html#AEN60514)では、コンポジットタイプのHeapTupleHeaderを使用する必要があります。 – gnuger
ああ、私はそれがユーザ定義のタイプであることを忘れていました。私は答えを修正しました。 –
それは魅力的に働いた。 – gnuger