sql >> データベース >  >> RDS >> PostgreSQL

Gormを使用したPostGISジオメトリの挿入と選択

    @ robbieperry22の回答を別のエンコーディングライブラリで使用したところ、バイトをいじくり回す必要がまったくないことがわかりました。

    参考のために含まれている要点。

    import  "github.com/twpayne/go-geom/encoding/geojson"
    
    
    type EWKBGeomPoint geom.Point
    
    func (g *EWKBGeomPoint) Scan(input interface{}) error {
        gt, err := ewkb.Unmarshal(input.([]byte))
        if err != nil {
            return err
        }
        g = gt.(*EWKBGeomPoint)
    
        return nil
    }
    
    func (g EWKBGeomPoint) Value() (driver.Value, error) {
        b := geom.Point(g)
        bp := &b
        ewkbPt := ewkb.Point{Point: bp.SetSRID(4326)}
        return ewkbPt.Value()
    }
    
    
    type Track struct {
        gorm.Model
    
        GeometryPoint EWKBGeomPoint `gorm:"column:geom"`
    }
    

    次に、テーブルのセットアップ/移行部分で少しカスタマイズを使用しました:

    err = db.Exec(`CREATE TABLE IF NOT EXISTS tracks (
        id SERIAL PRIMARY KEY,
        geom geometry(POINT, 4326) NOT NULL
    );`).Error
    if err != nil {
        return err
    }
    
    err = gormigrate.New(db, gormigrate.DefaultOptions, []*gormigrate.Migration{
    {
        ID: "init",
        Migrate: func(tx *gorm.DB) error {
            return tx.CreateTable(
                Tables...,
            ).Error
        },
    },
    {
        ID: "tracks_except_geom",
        Migrate: func(tx *gorm.DB) error {
            return db.AutoMigrate(Track{}).Error
        },
    },
    }).Migrate()
    
    


    1. c3p0で休止状態:createClob()はまだ実装されていません

    2. REGEXPサブストリングOracle

    3. rake db:migrateの問題-

    4. 致命的な問題を解決する方法:スーパーユーザー以外の接続制限を超えました