siyuan-note/siyuan · error

--av, --name and --type are required

Error message

--av, --name and --type are required

What it means

Thrown by `database key add` when any of `--av`, `--name`, or `--type` is empty. Adding a field requires the target database (`--av`), a human-readable field name (`--name`), and a field type string (`--type`) consumed by `model.AddAttributeViewKey`. All three are checked together.

Source

Thrown at kernel/cli/cmd/database.go:148

	},
}

var databaseKeyCmd = &cobra.Command{
	Use:   "key",
	Short: "Manage database keys (fields)",
}

var databaseKeyAddCmd = &cobra.Command{
	Use:   "add --av <avID> --name <name> --type <type>",
	Short: "Add a key (field) to database",
	RunE: func(cmd *cobra.Command, args []string) error {
		avID, _ := cmd.Flags().GetString("av")
		name, _ := cmd.Flags().GetString("name")
		keyType, _ := cmd.Flags().GetString("type")
		icon, _ := cmd.Flags().GetString("icon")
		prev, _ := cmd.Flags().GetString("prev")
		if avID == "" || name == "" || keyType == "" {
			return fmt.Errorf("--av, --name and --type are required")
		}

		if dryRun {
			fmt.Printf("[dry-run] Would add key \"%s\" (type=%s) to database %s\n", name, keyType, avID)
			return nil
		}

		keyID := ast.NewNodeID()
		if err := model.AddAttributeViewKey(avID, "", keyID, name, keyType, icon, prev, av.DateDisplayFormatFull); err != nil {
			return err
		}
		model.AppendPushReloadAttrViewEntry(avID)
		fmt.Println(keyID)
		return nil
	},
}

var databaseKeyRemoveCmd = &cobra.Command{

View on GitHub (pinned to 251596fc0d)

Solutions

  1. Provide all three: `siyuan database key add --av <id> --name "Status" --type mSelect`
  2. Look up supported key types from the av package before choosing `--type`
  3. Optionally include `--icon` and `--prev` for ordering/icon; those are not required

Example fix

// before
siyuan database key add --av 20240101000000-av12345 --name "Status"

// after
siyuan database key add --av 20240101000000-av12345 --name "Status" --type mSelect
Defensive patterns

Strategy: validation

Validate before calling

if strings.TrimSpace(avID) == "" || strings.TrimSpace(name) == "" || strings.TrimSpace(keyType) == "" {
    log.Fatal("--av, --name and --type are all required")
}
validTypes := map[string]bool{"text":true,"number":true,"date":true,"select":true,"mSelect":true,"url":true,"email":true,"phone":true,"template":true,"relation":true,"rollup":true,"lineNumber":true}
if !validTypes[keyType] {
    log.Fatalf("unsupported key type %q", keyType)
}

Prevention

When it happens

Trigger: Running `siyuan database key add --av <id> --name "Status"` (missing `--type`), or any combination missing one of the three.

Common situations: Not knowing the valid `--type` vocabulary (e.g. `text`, `number`, `date`, `select`, `mSelect`, `url`, `email`, `phone`, `template`, `relation`, `rollup`, etc.), or forgetting to name the field.

Related errors


AI-assisted analysis of siyuan-note/siyuan@251596fc0d (2026-08-12). Data as JSON: /api/errors/ecc337a8727d8c6f. Report an issue: GitHub.