# #postgresql #go #go-gorm
Вопрос:
У меня возникли проблемы с получением вставки базы данных для работы с gorm.
type T struct {
PoolAddress_ string `json:"pool_address" gorm:"column:pool_address"`
BlockNumber_ uint64 `json:"blockNumber" gorm:"column:block_number"`
TxHash_ string `json:"txnHashC" gorm:"column:transaction_hash"`
TransactionHash_ string `json:"transactionHash"`
OldPrice_ *big.Int `json:"old_price" gorm:"column:old_price"`
NewPrice_ *big.Int `json:"new_price" gorm:"column:new_price"`
KeeperAddress_ string `json:"keeper_address" gorm:"column:keeper_address"`
Source_ string `json:"source" gorm:"column:source"`
GasPrice_ uint64 `json:"gasPrice" gorm:"column:gas_price"`
GasTipCap_ uint64 `json:"GasTipCap" gorm:"column:gas_tip_cap"`
GasFeeCap_ uint64 `json:"GasFeeCap" gorm:"column:gas_fee_cap"`
GasUsed_ uint64 `json:"gasUsed" gorm:"column:gas_used"`
BlockTimestamp_ uint64 `json:"blockTimestamp" gorm:"column:block_timestamp"`
}
Когда ГОРМ идет разбираться с этим, я получаю;
[debug] Inserting into table
{000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c42778b0248d4630b7a792dddea2af5094639e9b 4351477 0xc5d846bea7a43ce79ec5dfbe6ed8565e9d82753293300581eb57175b1cfd9f04 0xc5d846bea7a43ce79ec5dfbe6ed8565e9d82753293300581eb57175b1cfd9f04 46008860000000000000000000000000000000000 45868020000000000000000000000000000000000 0x1A5E4Fc790fa234954d9AD765314676dF79aB601 Arbitrum 50000000000 50000000000 50000000000 12500000 1631463094}
Failed to insert into the database! invalid field found for struct github.com/mycelium-ethereum/myc/types/ethereum/etl/log/ocr/Tracer/v1.T's field OldPrice_, need to define a valid foreign key for relations or it need to implement the Valuer/Scanner interface
Это действительно расстраивает, потому что мне нужно, чтобы эти поля были большими, но ГОРМ, похоже, не хочет мне этого позволять, хотя я знаю, что ЧИСЛОВОЕ значение может содержать значение в базе данных. Я посмотрел на интерфейсы оценщика/сканера, но они, похоже, хотят возвращать базовые типы go, которые, очевидно, тоже не будут работать.
Мне нужно, чтобы значения были числовыми, я не могу хранить их в виде текста/байтов/и т. Д.
Комментарии:
1. Вместо
*big.Int
того , чтобы вы могли использоватьpgtype.Numeric
, он сам обертывает*big.Int
, а также реализуетValuer
/Scanner
интерфейсы.2. Или вы можете встроить
big.Int
в объявленный вами тип структуры и заставить этот тип структуры реализовать два интерфейса. Вам решать.3. Похоже, это использует pgx, будет ли это также работать с GORM?
4. Любой тип, реализующий интерфейсы оценщика/сканера, будет работать с gorm.