relman CLI: Schema Change Actions
← Back to the relman CLI command overview
Schema change actions (change bundles)
Schema changes are never applied directly. They are proposed into a change bundle, exactly like the web UI’s schema editor – nothing runs against the database until the bundle is sealed there. Every action below is one line inside such a bundle.
add changebundle <org-token> <pg-token> <project-token> <task-token> (aliases: changebundles, cb, cbs)
Creates a new, empty database change bundle for the task identified by <task-token> and prints its id and state – the same way the web UI’s “add change bundle” button does (unsealed, with audition-table updates enabled). Individual schema changes are not part of this command; this only creates the empty container they get added to.
list actions <org-token> <pg-token> <project-token> <task-token> <changebundle-token> (alias: action)
Fetches every proposed schema change (“action”) in the change bundle, across all sixteen action types below. This is the only way to find an existing action’s id to feed into the matching edit/cancel command, since add only ever hands back the id of the one it just created.
The sixteen action types
Every action type supports add, edit and cancel. cancel <action-type> <org> <pg> <project> <task> <changebundle> <action> is the same six-argument shape for every one of the sixteen types, so it is not repeated below – only what makes each add/edit distinct is.
table / renametable / removetable
add table <org> <pg> <project> <db> <catalog> <schema> <task> <changebundle> <table-name> <pk-column-name> <pk-column-type> [table-comment] [pk-column-comment]– proposes a new table in the schema identified by<schema>.<pk-column-type>is a type name as shown bylist column(e.g.int8), resolved server-side – no raw JDBC type constant needed.add renametable/add removetablefollow the same argument shape, targeting the table to rename/remove instead of proposing a new one.
column / removecolumn
add column <org> <pg> <project> <db> <catalog> <schema> <table> <task> <changebundle> <column-name> <native-type> <nullable> <primary-key> <unique> <auto-increment> [character-length] [default-value] [column-comment] – proposes a new column on the table identified by <table>. <native-type> is a type name as shown by list column (e.g. varchar), resolved server-side. <nullable>/<primary-key>/<unique>/<auto-increment> are true/false.
foreignkey / removeforeignkey / removeforeignkeyonetoone
add foreignkey <org> <pg> <project> <db> <catalog> <schema> <from-table> <from-column-token> <to-table> <to-column-token> <task> <changebundle> <fk-name> <delete-cascade> [fk-comment] – proposes a new foreign key from <from-column-token> (on <from-table>) to <to-column-token> (on <to-table>, both assumed within the same catalog/schema). <delete-cascade> is true/false.
Two gotchas worth knowing: <from-column-token>/<to-column-token> must be column tokens – the id field printed by list column – not the plain column name; unlike table arguments, there is no name-based fallback, so a name here silently resolves to nothing and the server answers HTTP 400. And [fk-comment], if given, becomes the literal text of a generated SQL COMMENT ON ... IS '...' statement; a single quote in it is not escaped server-side and breaks that statement (and with it the whole change bundle’s execution) – avoid apostrophes.
Column property edits: columnname, columndefault, columnnullability, columndimension, columncomment, columnuniqueness, columnprimarykey, columnautoincrement
These eight action types each change one property of an existing column without touching its type – a rename, a new default, nullability, dimension (length/precision), comment, uniqueness, primary-key membership, or auto-increment flag. Every add/edit takes the same shape: <org> <pg> <project> <db> <catalog> <schema> <table> <column> <task> <changebundle> [<action>] <new-value-field(s)...> – the action id is inserted only for edit (find one via list actions). Every add/edit prints the action’s id.
Examples
1. Opening a change bundle
Global flags omitted below – see Utility & global flags.
$ relman add changebundle o-4kNc8Q pg-8mZ2Lx p-Qv73Tn t-Nc2Xp8
id: cb-Vt62Fq
sealed: false
Edge case: nothing runs against the database yet – sealed: false means this is still an editable proposal. Sealing it (running the actual DDL) is only available from the web UI, not from relman.
2. Proposing a new column
$ relman add column o-4kNc8Q pg-8mZ2Lx p-Qv73Tn db-9Zx4Kp cat-3Hs7Bn sch-6Yp2Nx tab-Lm83Vq t-Nc2Xp8 cb-Vt62Fq newsletter_opt_in bool true false false false
id: cbat-Hn84Ws
Edge case: bool must be exactly one of the type names list column shows for existing columns – a close-but-wrong name like boolean fails server-side with no autocorrect. The four trailing true/false arguments are nullable/primary-key/unique/auto-increment, in that fixed order – swapping two of them silently proposes the wrong constraint instead of raising an error, since they’re all the same type.
3. Proposing a foreign key – and the column-token gotcha
$ relman add foreignkey o-4kNc8Q pg-8mZ2Lx p-Qv73Tn db-9Zx4Kp cat-3Hs7Bn sch-6Yp2Nx tab-Qf29Rz col-Jm3Bxz tab-Lm83Vq col-Qs81Nc t-Nc2Xp8 cb-Vt62Fq fk_orders_customer false
id: cbat-Rk29Lm
Edge case: col-Jm3Bxz/col-Qs81Nc here are the column tokens from list column‘s id field – not the plain names like customer_id. Running the same command with a column name instead of its token doesn’t raise a helpful error: it silently resolves to nothing and the server answers a bare HTTP 400, which is easy to misread as a permissions problem instead of a wrong-argument-type problem.
← Zurück zur Übersicht über die relman-CLI-Befehle
Maßnahmen zur Schemaänderung (Änderungsbündel)
Schemaänderungen werden niemals direkt angewendet. Sie werden in einem Änderungsbündel, genau wie im Schema-Editor der Web-Benutzeroberfläche – es werden keine Änderungen an der Datenbank vorgenommen, bis das Bündel dort versiegelt wurde. Jede der folgenden Aktionen entspricht einer Zeile innerhalb eines solchen Bündels.
add changebundle (Aliase: changebundles, cb, cbs)
Erstellt ein neues, leeres Datenbank-Änderungsbündel für die durch , und gibt dessen ID und Status aus – genau wie die Schaltfläche „Änderungsbündel hinzufügen“ in der Web-Benutzeroberfläche (unversiegelt, mit aktivierten Aktualisierungen der Audition-Tabelle). Einzelne Schemaänderungen sind nicht Bestandteil dieses Befehls; hiermit wird lediglich der leere Container erstellt, dem sie hinzugefügt werden.
Aktionen auflisten (Alias: action)
Ruft alle vorgeschlagenen Schemaänderungen („Aktionen“) im Änderungsbündel ab, und zwar über alle sechzehn unten aufgeführten Aktionstypen hinweg. Dies ist die einzige Möglichkeit, die ID einer bestehenden Aktion zu ermitteln, um sie in den entsprechenden Befehl bearbeiten/„cancel“ -Befehl einzugeben, da „add“ stets nur die ID der gerade erstellten Aktion zurückgibt.
Die sechzehn Aktionstypen
Jeder Aktionstyp unterstützt „add“, Bearbeiten sowie Abbrechen. „Abbrechen“ hat für jeden der sechzehn Typen dieselbe Form mit sechs Argumenten, daher wird dies im Folgenden nicht wiederholt – es wird lediglich aufgezeigt, was die jeweilige Funktion hinzufügen/bearbeiten von den anderen unterscheidet, wird aufgeführt.
table / umbenennbar / Tabelle entfernen
Tabelle hinzufügen– schlägt eine neue Tabelle in dem Schema vor, die durch[Tabellenkommentar] [Primärschlüssel-Spaltenkommentar] .ist ein Typname, wie durchSpaltenliste(z. B.int8), der serverseitig aufgelöst wird – es ist keine JDBC-Typkonstante erforderlich.„renametable“ hinzufügen/„removetable“ hinzufügenbefolgen dieselbe Argumentstruktur, wobei die umzubennende bzw. zu entfernende Tabelle als Ziel angegeben wird, anstatt eine neue vorzuschlagen.
Spalte / removecolumn
Spalte hinzufügen
[Zeichenlänge] [Standardwert] [Spaltenkommentar] – schlägt eine neue Spalte in der durch Spaltenlistevarchartruefalse
Fremdschlüssel / Fremdschlüssel entfernen / Fremdschlüssel-Eins-zu-Eins-Beziehung entfernen
Fremdschlüssel hinzufügen – schlägt einen neuen Fremdschlüssel vor, ausgehend von (auf ) auf (auf , wobei davon ausgegangen wird, dass sich beide im selben Katalog/Schema befinden). ist wahr/falsch.
Zwei wichtige Hinweise, die Sie beachten sollten: / müssen Spalten- Token – das von list column ausgegebenes ID-Feld – nicht der einfache Spaltenname; im Gegensatz zu Tabellenargumenten gibt es hier keinen namensbasierten Fallback, sodass ein Name an dieser Stelle stillschweigend zu nichts aufgelöst wird und der Server einen HTTP-400-Fehler zurückgibt. Und [fk-comment]wird, falls angegeben, zum wörtlichen Text eines generierten SQL-Befehls KOMMENTAR ZU … IST „…“ Anweisung; ein einfaches Anführungszeichen darin wird serverseitig nicht maskiert und führt zum Abbruch dieser Anweisung (und damit der Ausführung des gesamten Änderungsbündels) – vermeiden Sie Apostrophe.
Bearbeitung von Spalteneigenschaften: Spaltenname, columndefault, columnnullability, columndimension, Spaltenkommentar, Eindeutigkeit der Spalte, Spalten-Primärschlüssel, Spalten-Autoinkrement
Diese acht Aktionstypen ändern jeweils eine Eigenschaft einer bestehenden Spalte, ohne deren Typ zu verändern – eine Umbenennung, ein neuer Standardwert, die Nullzulässigkeit, die Dimension (Länge/Genauigkeit), ein Kommentar, die Eindeutigkeit, die Zugehörigkeit zum Primärschlüssel oder das Auto-Inkrement-Flag. Jede Hinzufügung/Bearbeitung hat denselben Aufbau:
[] – Die Aktions-ID wird nur für „edit“ (eine finden Sie über die Listenaktionen). Jede Hinzufügen/Bearbeiten gibt die ID der Aktion aus.
Beispiele
1. Öffnen eines Änderungsbündels
Globale Flags wurden im Folgenden weggelassen – siehe Dienstprogramme und globale Flags.
$ relman add changebundle o-4kNc8Q pg-8mZ2Lx p-Qv73Tn t-Nc2Xp8
id: cb-Vt62Fq
versiegelt: false
Sonderfall: Es läuft noch nichts gegen die Datenbank – sealed: false bedeutet, dass es sich weiterhin um einen bearbeitbaren Vorschlag handelt. Die Sperrung (Ausführung des eigentlichen DDL-Befehls) ist nur über die Web-Benutzeroberfläche möglich, nicht über relman.
2. Einen neuen Spaltenvorschlag erstellen
$ relman add column o-4kNc8Q pg-8mZ2Lx p-Qv73Tn db-9Zx4Kp cat-3Hs7Bn sch-6Yp2Nx tab-Lm83Vq t-Nc2Xp8 cb-Vt62Fq newsletter_opt_in bool true false false false
id: cbat-Hn84Ws
Sonderfall: bool muss genau einer der Typnamen sein Spalte in der Liste wird bei vorhandenen Spalten angezeigt – ein Name, der zwar ähnlich, aber falsch ist, wie boolean führt serverseitig zu einem Fehler, ohne dass eine Autokorrektur erfolgt. Die vier abschließenden true/false Argumente sind „nullable“, „primary-key“, „unique“ und „auto-increment“ in genau dieser festgelegten Reihenfolge – werden zwei davon vertauscht, wird stillschweigend die falsche Einschränkung vorgeschlagen, anstatt einen Fehler auszulösen, da sie alle denselben Typ haben.
3. Vorschlag eines Fremdschlüssels – und die Tücken des Spalten-Tokens
$ relman add foreignkey o-4kNc8Q pg-8mZ2Lx p-Qv73Tn db-9Zx4Kp cat-3Hs7Bn sch-6Yp2Nx tab-Qf29Rz col-Jm3Bxz tab-Lm83Vq col-Qs81Nc t-Nc2Xp8 cb-Vt62Fq fk_orders_customer false
id: cbat-Rk29Lm
Sonderfall: col-Jm3Bxz/col-Qs81Nc Hier sind die Spalten- Token aus der Liste „Spalte“s ID – nicht die bloßen Namen wie customer_id. Führen Sie denselben Befehl mit einer Spalte Name Anstelle seines Tokens wird kein aussagekräftiger Fehler ausgegeben: Die Auflösung erfolgt stillschweigend ohne Ergebnis, und der Server antwortet lediglich mit einem bloßen HTTP-400-Fehler, der leicht als Berechtigungsproblem missverstanden werden kann, anstatt als Problem aufgrund eines falschen Argumenttyps.
← Retour à la présentation des commandes de l’interface en ligne de commande (CLI) de relman
Actions de modification de schéma (ensembles de modifications)
Les modifications de schéma ne sont jamais appliquées directement. Elles sont proposées dans un ensemble de modifications, exactement comme dans l’éditeur de schéma de l’interface utilisateur Web : aucune opération n’est exécutée sur la base de données tant que le bundle n’y a pas été scellé. Chaque action ci-dessous correspond à une ligne au sein d’un tel bundle.
ajouter changebundle (alias : changebundles, cb, cbs)
Crée un nouveau bundle de modifications de base de données vide pour la tâche identifiée par et affiche son identifiant et son état, de la même manière que le bouton « Ajouter un ensemble de modifications » de l’interface utilisateur Web (non verrouillé, avec les mises à jour de la table d’audition activées). Les modifications de schéma individuelles ne font pas partie de cette commande ; celle-ci se contente de créer le conteneur vide auquel elles seront ajoutées.
liste des actions (alias : action)
Récupère toutes les modifications de schéma proposées (action) contenues dans le lot de modifications, parmi les seize types d’actions ci-dessous. C’est le seul moyen de trouver l’identifiant d’une action existante à fournir à l’instruction «/annuler correspondante, puisque la commande « add » ne renvoie en effet que l’identifiant de l’action qu’elle vient de créer.
Les seize types d’actions
Chaque type d’action prend en charge la commande « add », modifier et annuler. annuler présente la même structure à six arguments pour chacun des seize types ; elle n’est donc pas répétée ci-dessous — seules les particularités de chaque ajouter/modificateur est présenté.
table / renametable / supprimer une table
ajouter une table– propose une nouvelle table dans le schéma identifiée par[table-comment] [pk-column-comment] .est un nom de type, comme indiqué parliste des colonnes(par exempleint8), résolu côté serveur — aucune constante de type JDBC brute n’est nécessaire.ajouter renametable/Ajouter une fonction de suppressionsuivent la même structure d’arguments, en ciblant la table à renommer/supprimer au lieu d’en proposer une nouvelle.
colonne / supprimer_colonne
ajouter une colonne
[longueur-en-caractères] [valeur-par-défaut] [commentaire-de-colonne] – propose une nouvelle colonne dans la table identifiée par liste des colonnesvarcharvraifalse
clé étrangère / supprimer_clé_étrangère / supprimer-clé-étrangère-un-à-un
ajouter une clé étrangère – propose une nouvelle clé étrangère à partir de (sur ) vers (sur , tous deux supposés appartenir au même catalogue/schéma). est vrai/faux.
Deux points importants à retenir : / doit être un des jetons : le champ « id » affiché par colonne de la liste – et non le simple nom de la colonne ; contrairement aux arguments de table, il n’y a pas de solution de secours basée sur le nom, de sorte qu’un nom saisi ici est ignoré sans avertissement et que le serveur renvoie une réponse HTTP 400. Et [fk-comment], s’il est fourni, devient le texte littéral d’une requête SQL générée COMMENTAIRE SUR ... EST « ... » ; une apostrophe simple qu’elle contient n’est pas échappée côté serveur et interrompt cette instruction (et, par conséquent, l’exécution de l’ensemble du lot de modifications) – évitez les apostrophes.
Modifications des propriétés de colonne : columnname, columndefault, nullabilité_de_la_colonne, columndimension, commentaire_de_colonne, unicité de la colonne, clé_principale_de_colonne, auto-incrément de colonne
Ces huit types d’actions modifient chacun une propriété d’une colonne existante colonne sans modifier son type : un changement de nom, une nouvelle valeur par défaut, la possibilité d’être nul, la dimension (longueur/précision), un commentaire, l’unicité, l’appartenance à une clé primaire ou l’indicateur d’incrémentation automatique. Chaque ajout/modification suit le même format :
[] – l’identifiant de l’action n’est inséré que pour « edit » (vous en trouverez un via la actions de liste). Chaque ajout/modification affiche l’identifiant de l’action.
Exemples
1. Ouverture d’un ensemble de modifications
Les indicateurs globaux sont omis ci-dessous — voir Utilitaires et indicateurs globaux.
$ relman add changebundle o-4kNc8Q pg-8mZ2Lx p-Qv73Tn t-Nc2Xp8
id : cb-Vt62Fq
scellé : faux
Cas particulier : rien ne s’exécute encore contre la base de données – verrouillé : faux ce qui signifie qu’il s’agit toujours d’une proposition modifiable. Le verrouillage (exécution du DDL proprement dit) n’est possible qu’à partir de l’interface utilisateur Web, et non depuis relman.
2. Proposer une nouvelle colonne
$ relman add column o-4kNc8Q pg-8mZ2Lx p-Qv73Tn db-9Zx4Kp cat-3Hs7Bn sch-6Yp2Nx tab-Lm83Vq t-Nc2Xp8 cb-Vt62Fq newsletter_opt_in bool true false false false
id : cbat-Hn84Ws
Cas particulier : bool doit correspondre exactement à l’un des noms de type colonne de la liste s’affiche pour les colonnes existantes — un nom proche mais incorrect, tel que boolean entraîne une erreur côté serveur sans correction automatique. Les quatre caractères vrai/faux sont « nullable », « clé primaire », « unique » et « auto-incrément », dans cet ordre précis : intervertir deux d’entre eux propose silencieusement une contrainte erronée au lieu de générer une erreur, car ils sont tous du même type.
3. Proposition d’une clé étrangère – et le piège du jeton de colonne
$ relman add foreignkey o-4kNc8Q pg-8mZ2Lx p-Qv73Tn db-9Zx4Kp cat-3Hs7Bn sch-6Yp2Nx tab-Qf29Rz col-Jm3Bxz tab-Lm83Vq col-Qs81Nc t-Nc2Xp8 cb-Vt62Fq fk_orders_customer false
id : cbat-Rk29Lm
Cas particulier : col-Jm3Bxz/col-Qs81Nc voici les jeteons de la colonne « list »» « id » – et non les noms bruts tels que customer_id. L’exécution de la même commande avec une colonne » Au lieu de renvoyer son jeton, cela ne génère pas d’erreur utile : la requête est traitée en silence sans résultat et le serveur renvoie simplement un code HTTP 400, ce qui peut facilement être interprété à tort comme un problème d’autorisation plutôt que comme un problème lié à un type d’argument incorrect.
← Volver al resumen de los comandos de la CLI de relman
Acciones de cambio de esquema (paquetes de cambios)
Los cambios en el esquema nunca se aplican directamente. Se proponen en un paquete de cambios, exactamente igual que en el editor de esquemas de la interfaz de usuario web: no se ejecuta nada en la base de datos hasta que el paquete se haya sellado en ella. Cada una de las acciones que se indican a continuación constituye una línea dentro de dicho paquete.
añadir changebundle (alias: paquetes de cambios, cb, cbs)
Crea un nuevo paquete de cambios de base de datos vacío para la tarea identificada por e imprime su identificador y su estado, del mismo modo que lo hace el botón «Añadir paquete de cambios» de la interfaz de usuario web (sin sellar y con las actualizaciones de la tabla de auditoría habilitadas). Los cambios individuales en el esquema no forman parte de este comando; este solo crea el contenedor vacío al que se añaden.
Acciones de la lista (alias: acción)
Recupera todos los cambios de esquema propuestos (acción) del paquete de cambios, abarcando los dieciséis tipos de acción que se indican a continuación. Esta es la única forma de obtener el identificador de una acción existente para introducirlo en la correspondiente editar/cancelar correspondiente, ya que «add» solo devuelve el identificador de la acción que acaba de crear.
Los dieciséis tipos de acción
Cada tipo de acción admite «add», y editar y cancelar. cancelar tiene la misma estructura de seis argumentos para cada uno de los dieciséis tipos, por lo que no se repite a continuación; solo se indica lo que distingue a cada «añadir»/editar distinto.
tabla / renombrable / eliminar tabla
añadir tabla– propone una nueva tabla en el esquema identificada por[comentario-tabla] [comentario-columna-pk] .es un nombre de tipo tal y como se muestra enlista de columnas(p. ej.,int8), que se resuelve del lado del servidor —no se necesita ninguna constante de tipo JDBC sin procesar—.añadir renametable/Añadir removetablesigue la misma estructura de argumentos, indicando la tabla que se va a renombrar o eliminar en lugar de proponer una nueva.
columna / eliminar columna
añadir columna
[longitud-de-caracteres] [valor-por-defecto] [comentario-de-columna] – propone una nueva columna en la tabla identificada por lista de columnasvarchartruefalse
clave externa / eliminar clave externa / eliminar clave externa uno a uno
añadir clave externa – propone una nueva clave foránea a partir de (en ) a (en , ambos dentro del mismo catálogo o esquema). es verdadero/falso.
Dos aspectos que conviene tener en cuenta: / deben ser tokens : el campo «id» que muestra columna de la lista , y no el nombre de la columna tal cual; a diferencia de los argumentos de tabla, no existe una alternativa basada en el nombre, por lo que, si se introduce un nombre aquí, este se resuelve silenciosamente en nada y el servidor devuelve un código de estado HTTP 400. Y [fk-comment], si se especifica, se convierte en el texto literal de una instrucción SQL generada COMENTARIO SOBRE ... ES '...' una instrucción; una comilla simple en su interior no se escapa en el lado del servidor y provoca un error en dicha instrucción (y, con ello, interrumpe la ejecución de todo el paquete de cambios); evite el uso de apóstrofos.
Modificaciones de las propiedades de las columnas: nombre_columna, columndefault, columna_nula, columndimension, comentario de columna, unicidad de la columna, clave_primaria_de_columna, autoincremento de columna
Cada uno de estos ocho tipos de acción modifica una propiedad de una columna existente sin alterar su tipo: un cambio de nombre, un nuevo valor por defecto, la posibilidad de valores nulos, la dimensión (longitud/precisión), el comentario, la unicidad, la pertenencia a una clave primaria o el indicador de autoincremento. Cada edición/edición tiene el mismo formato:
[] – el identificador de acción se inserta únicamente para «editar» (puede encontrar uno a través de las acciones de lista). Cada Añadir/edición imprime el identificador de la acción.
Ejemplos
1. Apertura de un paquete de cambios
A continuación se omiten los indicadores globales; consulte Utilidades y indicadores globales.
$ relman add changebundle o-4kNc8Q pg-8mZ2Lx p-Qv73Tn t-Nc2Xp8
id: cb-Vt62Fq
sellado: falso
Caso extremo: todavía no se está ejecutando nada en la base de datos — sellado: falso lo que significa que sigue siendo una propuesta editable. El sellado (la ejecución del DDL propiamente dicho) solo está disponible desde la interfaz de usuario web, no desde relman.
2. Propuesta de una nueva columna
$ relman add column o-4kNc8Q pg-8mZ2Lx p-Qv73Tn db-9Zx4Kp cat-3Hs7Bn sch-6Yp2Nx tab-Lm83Vq t-Nc2Xp8 cb-Vt62Fq newsletter_opt_in bool true false false false
id: cbat-Hn84Ws
Caso extremo: bool debe ser exactamente uno de los nombres de tipo columna de la lista se muestra para las columnas existentes: un nombre similar pero incorrecto, como boolean da error en el servidor sin que se aplique la autocorrección. Los cuatro caracteres true/false son «nullable», «primary-key», «unique» y «auto-increment», en ese orden fijo; si se intercambian dos de ellos, se propone en silencio una restricción incorrecta en lugar de generar un error, ya que todos son del mismo tipo.
3. Propuesta de una clave foránea: la trampa del identificador de columna
$ relman add foreignkey o-4kNc8Q pg-8mZ2Lx p-Qv73Tn db-9Zx4Kp cat-3Hs7Bn sch-6Yp2Nx tab-Qf29Rz col-Jm3Bxz tab-Lm83Vq col-Qs81Nc t-Nc2Xp8 cb-Vt62Fq fk_orders_customer false
id: cbat-Rk29Lm
Caso extremo: col-Jm3Bxz/col-Qs81Nc A continuación se muestran las tokens de columna de la listade «id» , y no los nombres sin formato como customer_id. Al ejecutar el mismo comando con una columna nombre En lugar de su token, no genera un error útil: se resuelve de forma silenciosa sin dar ningún resultado y el servidor responde con un simple código HTTP 400, lo cual es fácil de interpretar erróneamente como un problema de permisos en lugar de un problema relacionado con un tipo de argumento incorrecto.
架构变更操作(变更包)
模式变更绝不会直接应用。它们会被提交到一个 变更包中,这与 Web UI 中的模式编辑器完全一致——在该包被封装到数据库之前,任何操作都不会在数据库上执行。以下每项操作在该包中均对应一行代码。
add changebundle (别名: changebundles, cb, cbs)
为由 所标识的任务创建一个新的、空的数据库变更包,并输出其ID和状态——这与Web UI中的“添加变更包”按钮的功能相同(未密封,且启用了audition-table更新)。该命令本身不包含具体的模式变更;它仅创建一个用于容纳这些变更的空容器。
列出操作 (别名: action)
检索变更包中所有拟议的模式变更(“操作”),涵盖以下全部十六种操作类型。这是查找现有操作ID并将其作为参数传递给匹配的 编辑/取消 命令,因为 add 仅会返回其刚刚创建的那个操作的 ID。
十六种操作类型
每种操作类型都支持 添加, edit 和 取消. 取消 对于十六种类型中的每一种,其形状均为相同的六个参数,因此下文不再重复说明——仅说明使每种 添加/编辑 的区别之处。
表 / renametable / 删除表
添加表– 在模式中创建一个新表,该表由[表注释] [主键列注释] .是一个类型名称,如列列表(例如int8),在服务器端解析——无需原始 JDBC 类型常量。添加可重命名/添加可重命名表遵循相同的参数结构,目标是重命名/删除现有表,而不是创建新表。
列 / removecolumn
添加列
[字符长度] [默认值] [列注释] – 向由 列列表varchartruefalse
外键 / 删除外键 / 删除一对一外键
添加外键 – 建议从 (在 ) 到 (在 ,均假定位于同一目录/模式内)。 是 true/false.
有两个值得注意的陷阱: / 必须是列 令牌 – 由 列 输出的字段标识符- 而不是普通的列名;与 table 参数不同,这里不存在基于名称的回退机制,因此此处的名称会被静默解析为空,服务器将返回 HTTP 400 状态码。此外 [fk-comment],若提供,将成为生成的 SQL 语句中的字面文本 关于“...是‘...’”的评论 语句;其中的单引号在服务器端未被转义,导致该语句报错(并进而导致整个变更包的执行失败)——请避免使用单引号。
列属性的编辑: columnname, columndefault, columnnullability, columndimension, 列注释, 列唯一性, 列主键, 列自动递增
这八种操作类型各自会更改一个 现有 列的某个属性,而不改变其数据类型——包括重命名、设置新默认值、可为空性、维度(长度/精度)、注释、唯一性、主键属性或自动递增标志。每个 添加/编辑 的格式均相同:
[] – 操作 ID 仅在 编辑 (可通过 列表操作中查找)时插入。每个 添加/编辑 都会打印该操作的ID。
示例
1. 打开更改包
下文省略全局标志——请参阅 实用工具与全局标志.
$ relman add changebundle o-4kNc8Q pg-8mZ2Lx p-Qv73Tn t-Nc2Xp8
id: cb-Vt62Fq
已密封:false
边界情况: 目前尚无任何操作针对该数据库运行—— 已封存:false 表示这仍是一个可编辑的提案。将其封存(执行实际的 DDL)仅可通过 Web 界面操作,无法通过 relman 实现。
2. 提出新增列
$ relman add column o-4kNc8Q pg-8mZ2Lx p-Qv73Tn db-9Zx4Kp cat-3Hs7Bn sch-6Yp2Nx tab-Lm83Vq t-Nc2Xp8 cb-Vt62Fq newsletter_opt_in bool true false false false
id: cbat-Hn84Ws
边界情况: bool 必须恰好是其中一个类型名称 列 显示现有列的情况——类似 boolean 在服务器端会报错,且无法自动更正。末尾的四个 true/false 参数的顺序是可空/主键/唯一/自增,且必须按此固定顺序排列——若将其中两个参数的位置对调,系统会默认生成错误的约束条件而非抛出错误,因为它们都属于同一类型。
3. 创建外键——以及列标识符的陷阱
$ relman add foreignkey o-4kNc8Q pg-8mZ2Lx p-Qv73Tn db-9Zx4Kp cat-3Hs7Bn sch-6Yp2Nx tab-Qf29Rz col-Jm3Bxz tab-Lm83Vq col-Qs81Nc t-Nc2Xp8 cb-Vt62Fq fk_orders_customer false
id: cbat-Rk29Lm
边界情况: col-Jm3Bxz/col-Qs81Nc 以下是列 令牌 来自 列表的列token的 id 字段——而不是像 customer_id这样的普通名称。若对列 名称 如果使用错误的参数类型代替其令牌,系统并不会返回有用的错误信息:它会默默地解析为空,而服务器仅返回一个简单的 HTTP 400 状态码,这很容易被误解为权限问题,而非参数类型错误。