Что такое "E" перед строкой Postgres?

Я читал заявление Postgres/PostGIS так:

SELECT ST_AsBinary(
ST_GeomFromWKB(
  E'\\001\\001\\000\\000\\000\\321\\256B\\312O\\304Q\\300\\347\\030\\220\\275\\336%E@',
  4326
  )
);

Вышесказанное создает что-то из хорошо известного двоичного файла (WKB). Я не видел конкретного способа цитирования здесь, где строка одинарная, заключенная в кавычки E перед началом цитаты.

Как называется этот формат? И каковы правила форматирования для этого? например, является 336%E@ в самом конце особенное или просто какое-то двоичное значение?

Это с Postgres9.3/9.4; PostGIS 2.1.

2 ответа

Решение

Согласно документации PostgreSQL http://www.postgresql.org/docs/9.0/static/sql-syntax-lexical.html (выделено мной)

PostgreSQL также принимает строковые константы escape, которые являются расширением стандарта SQL. Экранирующая константа задается путем написания E (верхний или нижний регистр) непосредственно перед открывающей одинарной кавычкой, например, E'foo', (Продолжая экранирующую строковую константу через строки, напишите E только перед первой открывающей кавычкой.) В escape-строке символ обратной косой черты (\) начинает C-подобную escape-последовательность обратной косой черты, в которой комбинация обратной косой черты и следующих символов представляет специальное значение байта

Использование \\ в вашей строке означает, что он избегает escape-последовательности, вероятно, для обеспечения безопасности при передаче и хранении в .sql файл. Стенографическая строка фактически перешла в ST_GeomFromWKB функция будет:

\001\001\000\000\000\321\256B\312O\304Q\300\347\030\220\275\336%E@

Эти последовательности из 3 или 4 символов между слешами будут интерпретированы ST_GeoFromWKB непосредственно.

Документация для ST_GeoFromWKB ( http://postgis.org/docs/ST_GeomFromWKB.html) заявляет:

ST_GeomFromWKB функция, принимает хорошо известное двоичное представление геометрии и идентификатор системы пространственной привязки (SRID) и создает экземпляр соответствующего типа геометрии. Эта функция играет роль фабрики геометрии в SQL. Это альтернативное название ST_WKBToSQL,

К сожалению, в нем не указано, какой именно формат представляет собой "хорошо известное двоичное представление".

Оказывается, что содержимое строки зависит от используемой вами системы координат, которая определяется SRID параметр. В этом случае 4326 соответствует WGS84: https://en.wikipedia.org/wiki/World_Geodetic_System

Вам нужно будет продолжить чтение и исследование, чтобы распутать это.

То, что вы видите, не выглядит шестнадцатеричным, потому что bytea строковый литерал в синтаксисе escape-строки (который в настоящее время довольно устарел).

E'\\001\\001\\000\\000\\000\\321\\256B\\312O\\304Q\\300\\347\\030\\220\\275\\336%E@'

То же, что и "стандартная соответствующая строка":

'\001\001\000\000\000\321\256B\312O\304Q\300\347\030\220\275\336%E@'

Оба находятся в "escape-формате", который может быть более эффективно представлен в "hex-формате" как:

'\x0101000000d1ae42ca4fc451c0e71890bdde254540'

Ты можешь использовать encode() а также decode() превратить одну форму в другую.

Я ответил на ваш дополнительный вопрос на gis.SE более подробно.

Другие вопросы по тегам