GISarabia.org
PostGIS › الدليل الرسمي › 7. مرجع PostGIS › 7.2. دوال إدارة الجداول
PostGIS 3.6 · Official Manual · ترجمة عربية

Populate_Geometry_Columns

الصفحة الأصلية بالإنجليزية postgis.net ↗

الاسم

Populate_Geometry_Columns — تضمن تعريف أعمدة geometry بمُعدِّلات نوع أو احتواءها على قيود مكانية مناسبة.

المختصر

text Populate_Geometry_Columns(boolean use_typmod=true);

int Populate_Geometry_Columns(oid relation_oid, boolean use_typmod=true);

الوصف

تضمن أن لأعمدة geometry مُعدِّلات نوع أو قيودًا مكانية مناسبة لضمان تسجيلها بشكل صحيح في العرض geometry_columns. وافتراضيًا تحوّل جميع أعمدة geometry التي لا تملك مُعدِّل نوع إلى أعمدة ذات مُعدِّلات نوع.

للتوافق الرجعي وللاحتياجات المكانية مثل وراثة الجداول حيث قد يكون لكل جدول فرعي نوع شكل هندسي مختلف، لا يزال سلوك قيود التحقق (check constraints) القديم مدعومًا. وإذا احتجت إلى السلوك القديم، فعليك تمرير الوسيط الاختياري الجديد بقيمة false use_typmod=false. وعندئذٍ ستُنشأ أعمدة geometry دون مُعدِّلات نوع لكن مع تعريف 3 قيود. وهذا يعني تحديدًا أن كل عمود geometry ينتمي إلى جدول له ثلاثة قيود على الأقل:

  • enforce_dims_geom - يضمن أن لكل شكل هندسي البعد نفسه (انظر ST_NDims)

  • enforce_geotype_geom - يضمن أن كل شكل هندسي من النوع نفسه (انظر GeometryType)

  • enforce_srid_geom - يضمن أن كل شكل هندسي في الإسقاط نفسه (انظر ST_SRID)

إذا قُدِّم oid لجدول، تحاول هذه الدالة تحديد srid والبعد ونوع الشكل الهندسي لجميع أعمدة geometry في الجدول، مضيفةً القيود عند الحاجة. وعند النجاح، يُدرَج صف مناسب في الجدول geometry_columns، وإلا يُلتقط الاستثناء ويُطلق إشعار خطأ يصف المشكلة.

إذا قُدِّم oid لعرض (view)، فكما في حالة oid الجدول، تحاول هذه الدالة تحديد srid والبعد والنوع لجميع الأشكال الهندسية في العرض، وتُدرج المُدخلات المناسبة في الجدول geometry_columns، لكن لا يُفعل شيء لفرض القيود.

الصيغة الخالية من الوسائط هي غلاف بسيط للصيغة ذات الوسائط، تُفرغ أولًا جدول geometry_columns ثم تعيد ملأه لكل جدول وعرض مكاني في قاعدة البيانات، مضيفةً القيود المكانية إلى الجداول عند الاقتضاء. وتُعيد ملخصًا بعدد أعمدة geometry المكتشفة في قاعدة البيانات والعدد الذي أُدرج في الجدول geometry_columns. أما الصيغة ذات الوسائط فتُعيد ببساطة عدد الصفوف المُدرجة في الجدول geometry_columns.

متاحة منذ: 1.4.0

تغيّرت في: 2.0.0 أصبحت افتراضيًا تستخدم مُعدِّلات النوع بدلًا من قيود التحقق لتقييد أنواع الأشكال الهندسية. ولا يزال بإمكانك استخدام سلوك قيود التحقق بدلًا من ذلك باستخدام الوسيط الجديد use_typmod وضبطه على false.

حُسّنت في: 2.0.0 أُضيف الوسيط الاختياري use_typmod الذي يتيح التحكم في ما إذا كانت الأعمدة تُنشأ بمُعدِّلات نوع أو بقيود تحقق.

أمثلة

CREATE TABLE public.myspatial_table(gid serial, geom geometry);
INSERT INTO myspatial_table(geom) VALUES(ST_GeomFromText('LINESTRING(1 2, 3 4)',4326) );
-- This will now use typ modifiers.  For this to work, there must exist data
SELECT Populate_Geometry_Columns('public.myspatial_table'::regclass);

populate_geometry_columns
--------------------------
                        1


\d myspatial_table

                                   Table "public.myspatial_table"
 Column |           Type            |                           Modifiers
--------+---------------------------+---------------------------------------------------------------
 gid    | integer                   | not null default nextval('myspatial_table_gid_seq'::regclass)
 geom   | geometry(LineString,4326) |
-- This will change the geometry columns to use constraints if they are not typmod or have constraints already.
--For this to work, there must exist data
CREATE TABLE public.myspatial_table_cs(gid serial, geom geometry);
INSERT INTO myspatial_table_cs(geom) VALUES(ST_GeomFromText('LINESTRING(1 2, 3 4)',4326) );
SELECT Populate_Geometry_Columns('public.myspatial_table_cs'::regclass, false);
populate_geometry_columns
--------------------------
                        1
\d myspatial_table_cs

                          Table "public.myspatial_table_cs"
 Column |   Type   |                            Modifiers
--------+----------+------------------------------------------------------------------
 gid    | integer  | not null default nextval('myspatial_table_cs_gid_seq'::regclass)
 geom   | geometry |
Check constraints:
    "enforce_dims_geom" CHECK (st_ndims(geom) = 2)
    "enforce_geotype_geom" CHECK (geometrytype(geom) = 'LINESTRING'::text OR geom IS NULL)
    "enforce_srid_geom" CHECK (st_srid(geom) = 4326)