So fügen Sie eine Länge Einschränkung auf ein Textfeld
Es scheint, ist es vorzuziehen, verwenden Sie die TEXT
Datentyp bei Verwendung einer PostgreSQL (oder einigen anderen Datenbanken, die es unterstützen) anstatt character varying(NN)
da gibt es keine Leistungseinbußen, und die maximal mögliche Länge eingestellt werden kann durch löschen und erneutes anwenden von constraints, ohne dass alle Ansichten etc. die verwenden das Feld.
Aber, wie ist diese Einschränkung angewendet (SQL-code)?
Aber ist eine text-Spalte mit einer Länge von check-Einschränkung wirklich effizienter als nvarchar?
Postgres nicht
Siehe postgresql.org/docs/current/interactive/datatype-character.html "Tipp: Es gibt keine performance-Unterschied zwischen diesen drei Arten, abgesehen von erhöhten Stauraum bei Nutzung der leer-gepolsterte Typ, und ein paar CPU-Zyklen zu prüfen, die Länge, die beim speichern in einer Länge eingeschränkt Spalte."
Postgres nicht
nvarchar
Siehe postgresql.org/docs/current/interactive/datatype-character.html "Tipp: Es gibt keine performance-Unterschied zwischen diesen drei Arten, abgesehen von erhöhten Stauraum bei Nutzung der leer-gepolsterte Typ, und ein paar CPU-Zyklen zu prüfen, die Länge, die beim speichern in einer Länge eingeschränkt Spalte."
InformationsquelleAutor Tobias | 2015-04-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beim erstellen der Tabelle, die Sie tun können, etwas von dieser Art,
(
namechk
ist nur ein name für die Einschränkung)Gleiche gilt für
ALTER TABLE
zum Beispiel:char_length
oderlength
? Ich mittlerweile angewendet Einschränkungen bei der letzten ...Der Vergleich sollte
<= 255
natürlich.ERROR: syntax error at or near "namechk"
Sieht aus wie Sie können nicht angeben, constraint-Namen angeben, wenn es bei Erstellung der Tabellewelche version von PostgreSQL beziehen Sie sich?
In der version
PostgreSQL 10.3
CREATE TABLE names ( name text CHECK namechk (char_length(name) <= 255))
nicht arbeiten, aberCREATE TABLE names ( name text CHECK (char_length(name) <= 255))
tunInformationsquelleAutor gmaliar
Gibt es eigentlich drei Dinge hier:
text
+ eine check-Einschränkung oder einervarchar(N)
?Antworten:
varchar(N)
noch deutlicher bei der überprüfung des schema, und was Entwickler aus anderen DBs erwarten, dass Sie zu sehen. Jedoch, wie Sie sagen, ist es schwieriger, Sie zu ändern später. Beachten Sie, dass die Anwendung einer neuen/geänderten check-Einschränkung ist nicht kostenlos - alle vorhandenen Zeilen, die geprüft werden müssen, gegen die Einschränkung, damit auf einem großen Tisch, mit viel Lesen ist notwendig.CONSTRAINT name CHECK (condition)
(oder nurCHECK (condition)
- und Postgres selbst kommen mit einem Namen) in einerCREATE TABLE
- Anweisung, undALTER TABLE table_name ADD CONSTRAINT name CHECK (condition);
.condition
wäre ein Ausdruck mit einem geeigneten string-Funktion, z.B.char_length(foo) <= 255
.ALTER TABLE foo DROP CONSTRAINT ck_bar_length; ALTER TABLE foo ADD CONSTRAINT ck_bar_length CHECK ( char_length(bar) <= 100 );
ich kann nicht wirklich denken, der eine Nachteil der Benennung Ihrer Einschränkung.Jedem Werkzeug, das Sie verwenden, erstellen Sie es mit etwas name, generiert nach einiger Algorithmus. Es ist jedoch nicht
Ich brauche keine solche Garantie. Ich würde verwenden Sie das interaktive tool einmal, und dann verwende ich den SQL-code generiert, um die gleichen änderungen in anderen Orten, wenn erforderlich, oder speichern Sie in Dateien.
Das ist ein Grund, warum es egal) wählen Sie einen Namen, aber es ist nicht auf seinem eigenen Grund nicht einen Namen auswählen. Buchstäblich der einzige Grund, warum ich denken kann, der nicht zu retten ist 10 Sekunden von der Eingabe, und das ist ein ziemlich lahmer Grund.
InformationsquelleAutor IMSoP