github.com/snowflakedb/gosnowflake@v1.9.0/cmd/keypair/keypair.go (about)

     1  // Example: Authenticate with Keypair.
     2  // Prerequisite: Follow the steps to set up a keypair - https://docs.snowflake.com/en/user-guide/key-pair-auth.html#configuring-key-pair-authentication
     3  
     4  package main
     5  
     6  import (
     7  	"database/sql"
     8  	"flag"
     9  	"fmt"
    10  	"log"
    11  
    12  	sf "github.com/snowflakedb/gosnowflake"
    13  )
    14  
    15  func main() {
    16  	if !flag.Parsed() {
    17  		flag.Parse()
    18  	}
    19  
    20  	cfg, err := sf.GetConfigFromEnv([]*sf.ConfigParam{
    21  		{Name: "Account", EnvName: "SNOWFLAKE_TEST_ACCOUNT", FailOnMissing: true},
    22  		{Name: "User", EnvName: "SNOWFLAKE_TEST_USER", FailOnMissing: true},
    23  		{Name: "Host", EnvName: "SNOWFLAKE_TEST_HOST", FailOnMissing: false},
    24  		{Name: "Port", EnvName: "SNOWFLAKE_TEST_PORT", FailOnMissing: false},
    25  		{Name: "Protocol", EnvName: "SNOWFLAKE_TEST_PROTOCOL", FailOnMissing: false},
    26  		{Name: "PrivateKey", EnvName: "SNOWFLAKE_TEST_PRIVATE_KEY", FailOnMissing: true},
    27  	})
    28  	if err != nil {
    29  		log.Fatalf("failed to create Config, err: %v", err)
    30  	}
    31  	cfg.Authenticator = sf.AuthTypeJwt
    32  	dsn, err := sf.DSN(cfg)
    33  	if err != nil {
    34  		log.Fatalf("failed to create DSN from Config: %v, err: %v", cfg, err)
    35  	}
    36  
    37  	db, err := sql.Open("snowflake", dsn)
    38  	if err != nil {
    39  		log.Fatalf("failed to connect. %v, err: %v", dsn, err)
    40  	}
    41  	defer db.Close()
    42  	query := "SELECT 1"
    43  	rows, err := db.Query(query) // no cancel is allowed
    44  	if err != nil {
    45  		log.Fatalf("failed to run a query. %v, err: %v", query, err)
    46  	}
    47  	defer rows.Close()
    48  	var v int
    49  	for rows.Next() {
    50  		err := rows.Scan(&v)
    51  		if err != nil {
    52  			log.Fatalf("failed to get result. err: %v", err)
    53  		}
    54  		if v != 1 {
    55  			log.Fatalf("failed to get 1. got: %v", v)
    56  		}
    57  	}
    58  	if rows.Err() != nil {
    59  		fmt.Printf("ERROR: %v\n", rows.Err())
    60  		return
    61  	}
    62  	fmt.Printf("Congrats! You have successfully run %v with Snowflake DB!\n", query)
    63  }