ตั้งค่าเส้นทางสคีมา Postgresql อย่างถาวร


141

ฉันจำเป็นต้องเส้นทางคีมาตั้งอยู่ใน Postgres schema2.tableเพื่อให้ฉันทำไม่ได้ทุกครั้งที่ระบุเช่นสคี กำหนดเส้นทางสคีมา:

SET SCHEMA PATH a,b,c

ดูเหมือนว่าจะใช้ได้กับเซสชันแบบสอบถามเดียวบน mac เท่านั้นหลังจากที่ฉันปิดหน้าต่างแบบสอบถามตัวแปรเส้นทางจะตั้งค่าตัวเองกลับเป็นค่าเริ่มต้น

ฉันจะทำให้มันถาวรได้อย่างไร?


ฉันคิดว่า SET search_path ถึง a, b, c; ตามที่คำตอบบอกและไม่กำหนดเส้นทางการตั้งค่า a, b, c;
Armando

คำตอบ:


173

(และหากคุณไม่มีสิทธิ์เข้าถึงเซิร์ฟเวอร์ของผู้ดูแลระบบ)

ALTER ROLE <your_login_role> SET search_path TO a,b,c;

สิ่งสำคัญสองประการที่ควรทราบ:

  1. เมื่อชื่อสคีมาไม่ใช่เรื่องง่ายต้องมีเครื่องหมายคำพูดซ้อน
  2. ลำดับที่คุณตั้งค่าสกีมาเริ่มต้นมีความa, b, cสำคัญเนื่องจากเป็นลำดับที่ระบบจะค้นหาตารางด้วย ดังนั้นหากคุณมีชื่อตารางเดียวกันในมากกว่าหนึ่งสคีมาท่ามกลางค่าเริ่มต้นจะไม่มีความคลุมเครือเซิร์ฟเวอร์จะใช้ตารางจากสคีมาแรกที่คุณระบุไว้สำหรับของคุณsearch_pathเสมอ

20
นอกจากนี้ควรสังเกตอย่างชัดเจนว่าอย่าใช้เครื่องหมายคำพูดรอบการแจกแจง a, b, c มือเตะหน้าผาก 15 นาทีที่ผ่านมา ...
Jmoney38

4
@ Jmoney38 ไม่ใช้เครื่องหมายคำพูดเดี่ยว แต่จำเป็นต้องมีเครื่องหมายคำพูดคู่สำหรับชื่อสคีมาที่ไม่เรียบง่าย
vitaly-t

ใช่สิ่งเหล่านี้เป็นตัวระบุไม่ใช่สตริง
Ludovic Kuty

139

คุณสามารถตั้งค่าเริ่มต้นsearch_pathที่ระดับฐานข้อมูล:

ALTER DATABASE <database_name> SET search_path TO schema1,schema2;

หรือในระดับผู้ใช้หรือบทบาท:

ALTER ROLE <role_name> SET search_path TO schema1,schema2;

หรือหากคุณมีคีเริ่มต้นที่พบบ่อยในฐานข้อมูลของคุณทั้งหมดที่คุณสามารถตั้งค่าเริ่มต้นของระบบทั้งในไฟล์ config กับSEARCH_PATHตัวเลือก

เมื่อฐานข้อมูลถูกสร้างขึ้นโดยค่าเริ่มต้นจะถูกสร้างขึ้นโดยค่าเริ่มต้นจากฐานข้อมูล "template" ที่ซ่อนชื่อtemplate1คุณสามารถแก้ไขฐานข้อมูลนั้นเพื่อระบุเส้นทางการค้นหาเริ่มต้นใหม่สำหรับฐานข้อมูลทั้งหมดที่สร้างในอนาคต คุณยังสามารถสร้างฐานข้อมูลเทมเพลตอื่นและใช้CREATE DATABASE <database_name> TEMPLATE <template_name>เพื่อสร้างฐานข้อมูลของคุณ


9
สำหรับผู้ที่สงสัยจากบรรทัดคำสั่ง psql คุณสามารถแสดงรายการสกีมาโดย \ dn
BKSpurgeon

3
จำเป็นต้องยกเลิกการเชื่อมต่อเซสชันและเชื่อมต่ออีกครั้งเพื่อให้การตั้งค่ามีผล
isapir

โอ้อวยพรคุณ มาที่ PG จาก SQL Server ดังนั้นนี่จึงเป็นเรื่องใหม่ (และแปลก) สำหรับฉัน
Nate Anderson

25

Josh ถูกต้อง แต่เขาทิ้งรูปแบบหนึ่งไว้:

ALTER ROLE <role_name> IN DATABASE <db_name> SET search_path TO schema1,schema2;

กำหนดเส้นทางการค้นหาสำหรับผู้ใช้ในฐานข้อมูลเดียว


มีประโยชน์มากเช่นกัน ขอบคุณ
Alejandro Teixeira Muñoz
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.