ГОРМ: Вставка *Большая.Int в ЧИСЛОВОЙ столбец (postgresql)

# #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.