@vitaly-tの答えはすべてを説明しています!
@vitaly-t answer の postgree (ソリューション 3) での暗黙的なグローバル変換の場合。
ここで知っておくべきこと:
const typesBuiltins = {
BOOL: 16,
BYTEA: 17,
CHAR: 18,
INT8: 20,
INT2: 21,
INT4: 23,
REGPROC: 24,
TEXT: 25,
OID: 26,
TID: 27,
XID: 28,
CID: 29,
JSON: 114,
XML: 142,
PG_NODE_TREE: 194,
SMGR: 210,
PATH: 602,
POLYGON: 604,
CIDR: 650,
FLOAT4: 700,
FLOAT8: 701,
ABSTIME: 702,
RELTIME: 703,
TINTERVAL: 704,
CIRCLE: 718,
MACADDR8: 774,
MONEY: 790,
MACADDR: 829,
INET: 869,
ACLITEM: 1033,
BPCHAR: 1042,
VARCHAR: 1043,
DATE: 1082,
TIME: 1083,
TIMESTAMP: 1114,
TIMESTAMPTZ: 1184,
INTERVAL: 1186,
TIMETZ: 1266,
BIT: 1560,
VARBIT: 1562,
NUMERIC: 1700,
REFCURSOR: 1790,
REGPROCEDURE: 2202,
REGOPER: 2203,
REGOPERATOR: 2204,
REGCLASS: 2205,
REGTYPE: 2206,
UUID: 2950,
TXID_SNAPSHOT: 2970,
PG_LSN: 3220,
PG_NDISTINCT: 3361,
PG_DEPENDENCIES: 3402,
TSVECTOR: 3614,
TSQUERY: 3615,
GTSVECTOR: 3642,
REGCONFIG: 3734,
REGDICTIONARY: 3769,
JSONB: 3802,
REGNAMESPACE: 4089,
REGROLE: 4096
};
ここで見つけることができます
https://github.com/brianc/node-pg-types/blob/master/lib/builtins.js
通常はこの方法でアクセスできます
const pg = require('pg');
pg.types.setTypeParser(pg.types.builtins.INT8, (value: string) => {
return parseInt(value);
});
pg.types.setTypeParser(pg.types.builtins.FLOAT8, (value: string) => {
return parseFloat(value);
});
pg.types.setTypeParser(pg.types.builtins.NUMERIC, (value: string) => {
return parseFloat(value);
});
その通常はすべての数値データを処理します。
何らかの理由で pg.types.builtins にアクセスできない場合 (私の場合、何らかの理由で typescript で)。それをコピーするだけです。または、対応するマップされた番号を直接使用します。
更新 (混乱を避けるため)
現在は "pg": "^7.11.0" です。pg は、ビルトインをまったく含まない pg-types 2.0.1 を使用しています。以前のすべてのバージョンも同様です。これにより、アクセスpg.types.builtins.
が実行できなくなります (上記のバージョンまでのいずれのバージョンでも)。
前に述べた解決策は、現在のプロジェクトで行ったようにマッピングをコピーすることです。(上記のスニペットをすべてチェックしてコピーしてください)
または、リストを指定して対応するマッピングを直接使用します。
pgp.pg.types.setTypeParser(20, parseInt);
回避策としての別の解決策は、pg-types パッケージを直接使用することです。それの最新バージョンです。
const types = require('pg-types');
// types.builtins.INT8
それ以外の場合は、次のリンクで確認できる @vitaly-t によって PR が埋められ
ます。
pg-types
withingpg
パッケージ (node-postgres)
のバージョンを更新します。
それで一旦受理。イニシャルの例が機能し始めます。
私のソースは当初、 httpspg-types
: //github.com/brianc/node-pg-typesの公式の README であったことに注意してください。
もう 1 つの最後の注意事項:
これはtypescriptの使用に関するものです。
pg-types
typescript の入力には、現在のバージョンのようにビルトインが含まれていません"pg-types": "^2.1.0"
。更新予定です。したがって、自分で入力を追加するかのどちらかです。
typeof types & {builtins: {[key in builtinsTypes]: number}}
ここで、builtinsTypes はすべてのプロパティ名の結合です。
(ただし、穴オブジェクトをコピーして貼り付けると、より速く、より短く、よりきれいになります)。
次のように列挙型でそれを行うことができます
enum TypeId {
BOOL = 16,
BYTEA = 17,
CHAR = 18,
INT8 = 20,
INT2 = 21,
INT4 = 23,
REGPROC = 24,
TEXT = 25,
OID = 26,
TID = 27,
XID = 28,
CID = 29,
JSON = 114,
XML = 142,
PG_NODE_TREE = 194,
SMGR = 210,
PATH = 602,
POLYGON = 604,
CIDR = 650,
FLOAT4 = 700,
FLOAT8 = 701,
ABSTIME = 702,
RELTIME = 703,
TINTERVAL = 704,
CIRCLE = 718,
MACADDR8 = 774,
MONEY = 790,
MACADDR = 829,
INET = 869,
ACLITEM = 1033,
BPCHAR = 1042,
VARCHAR = 1043,
DATE = 1082,
TIME = 1083,
TIMESTAMP = 1114,
TIMESTAMPTZ = 1184,
INTERVAL = 1186,
TIMETZ = 1266,
BIT = 1560,
VARBIT = 1562,
NUMERIC = 1700,
REFCURSOR = 1790,
REGPROCEDURE = 2202,
REGOPER = 2203,
REGOPERATOR = 2204,
REGCLASS = 2205,
REGTYPE = 2206,
UUID = 2950,
TXID_SNAPSHOT = 2970,
PG_LSN = 3220,
PG_NDISTINCT = 3361,
PG_DEPENDENCIES = 3402,
TSVECTOR = 3614,
TSQUERY = 3615,
GTSVECTOR = 3642,
REGCONFIG = 3734,
REGDICTIONARY = 3769,
JSONB = 3802,
REGNAMESPACE = 4089,
REGROLE = 4096
}
https://github.com/vitaly-t/pg-promise/blob/v9/typescript/pg-subset.d.ts#L103内で行われたようにpg-promise
すべてが更新されたら。pg からの使用は道のりです。
アップデート
パッケージが更新されました。そして期待通りに使えます。
import { types } from 'pg';
// data parsing
types.setTypeParser(types.builtins.INT8, (value: string) => {
return parseInt(value);
});
types.setTypeParser(types.builtins.FLOAT8, (value: string) => {
return parseFloat(value);
});
types.setTypeParser(types.builtins.NUMERIC, (value: string) => {
return parseFloat(value);
});
上記のvitaly-tの回答
のUPDATE-2の部分も確認してください https://stackoverflow.com/a/39176670/7668448