sql >> Base de Datos >  >> RDS >> PostgreSQL

Comportamiento extraño en Postgresql

Su update_tbl_point probablemente la función esté haciendo algo como esto:

new.last_update = current_timestamp;

pero debería estar usando new."Last_Update" así que arregla tu función de activación.

Los nombres de las columnas se normalizan a minúsculas en PostgreSQL (lo contrario de lo que dice el estándar SQL), pero los identificadores que están entre comillas dobles mantienen su caso:

Citar un identificador también lo hace sensible a mayúsculas y minúsculas, mientras que los nombres sin comillas siempre se doblan a minúsculas. Por ejemplo, PostgreSQL considera que los identificadores FOO, foo y "foo" son iguales, pero "Foo" y "FOO" son diferentes de estos tres y entre sí. (El doblado de nombres sin comillas a minúsculas en PostgreSQL es incompatible con el estándar SQL, que dice que los nombres sin comillas se deben doblar a mayúsculas. Por lo tanto, foo debería ser equivalente a "FOO" y no a "foo" de acuerdo con el estándar. Si desea escribir aplicaciones portátiles, se recomienda citar siempre un nombre en particular o nunca citarlo).

Entonces, si haces esto:

create table pancakes (
    Eggs integer not null
)

entonces puedes hacer cualquiera de estos:

update pancakes set eggs = 11;
update pancakes set Eggs = 11;
update pancakes set EGGS = 11;

y funcionará porque las tres formas están normalizadas a eggs . Sin embargo, si haces esto:

create table pancakes (
    "Eggs" integer not null
)

entonces puedes hacer esto:

update pancakes set "Eggs" = 11;

pero no esto:

update pancakes set eggs = 11;

La práctica habitual con PostgreSQL es usar identificadores en minúsculas en todas partes para que no tenga que preocuparse por eso. Recomendaría el mismo esquema de nombres en otras bases de datos también, tener que citar todo lo deja con un lío de comillas dobles (estándar), acentos graves (MySQL) y corchetes (SQL Server) en su SQL y eso no hacerte amigos.